【发布时间】:2016-05-12 08:17:14
【问题描述】:
我们有一个 Wildfly 实例,它在 36 核服务器上运行了一个简单的 java rest 应用程序。该应用程序没有在后台运行默认作业,它只是响应用户请求(每天
我们的管理员今天晚上发现了一个奇怪的行为。从凌晨 2:00 开始,wildfly 实例显然使用了服务器的全部容量。当时没有用户可以使用该应用程序。在前一天晚上的最后一个用户操作和今天早上的第一个用户操作之间没有可用的日志文件。
我已经在 Eclipse 中启动了远程调试器,想了解 Wildfly 启动的所有线程实际上是做什么的?
-
Thread[MSC service thread 1-xx](Running)68 个条目。那些线程是干什么用的?它们会影响性能/容量覆盖吗?我可以限制这些线程的数量吗?我应该这样做吗? -
Deamon Thread [weld-worker-xx](Running)25 个条目。 -
Thread[default task-x](Running)8 个条目。这些可能是实际的用户任务? -
Thread[XNIO-1 I/O-x](Running)2 个条目。输入/输出到数据库?或任何文件,例如记录 e.q.? Daemon Thread [Transaction Reaper](Running)Deamon Thread [Transaction Reaper Worker 0](Running)Thread [Periodic Recovery](Running)- 很多
<not responding>。这实际上是什么意思?线程正在运行,但我不允许查看?
【问题讨论】:
-
这是一个相当广泛的问题,但我怀疑您的问题与没有响应的线程有关。我想他们是那些正在努力旋转并吃掉你的 CPU 的人。
-
您可能还想发出
kill -3 <pid of wildfly process>让 Wildfly 将线程转储打印到标准输出(应该重定向到某个文件)。保存转储以供以后分析。 -
您好 Kayaman,感谢您的提示。
<not responding>线程在重启后消失了,性能变得相当好。下次出现问题时,我们将尝试打印线程转储。我仍然对所有其他线程堆栈条目的解释感兴趣,只是为了了解通常发生的事情。所以任何解释都会很棒! -
他们当然消失了。这就是为什么您需要在重新启动之前收集所有可能的信息。至于其他线程,您拥有 Wildfly 的线程以及可能属于您正在使用的任何其他库的线程。这里涉及的范围太广,但是 Wildfly 的文档和一些谷歌搜索应该可以清除其中的很多内容。如果您设法将调试器附加到服务器,则可以查看线程正在做什么(或它们正在等待什么)并尝试从中推断出它们的工作。
标签: java eclipse multithreading remote-debugging wildfly-8