【问题标题】:Analyse the remote debugging stack of a java application on Wildfly在 Wildfly 上分析一个 java 应用程序的远程调试堆栈
【发布时间】:2016-05-12 08:17:14
【问题描述】:

我们有一个 Wildfly 实例,它在 36 核服务器上运行了一个简单的 java rest 应用程序。该应用程序没有在后台运行默认作业,它只是响应用户请求(每天

我们的管理员今天晚上发现了一个奇怪的行为。从凌晨 2:00 开始,wildfly 实例显然使用了服务器的全部容量。当时没有用户可以使用该应用程序。在前一天晚上的最后一个用户操作和今天早上的第一个用户操作之间没有可用的日志文件。

我已经在 Eclipse 中启动了远程调试器,想了解 Wildfly 启动的所有线程实际上是做什么的?

  1. Thread[MSC service thread 1-xx](Running) 68 个条目。那些线程是干什么用的?它们会影响性能/容量覆盖吗?我可以限制这些线程的数量吗?我应该这样做吗?
  2. Deamon Thread [weld-worker-xx](Running) 25 个条目。
  3. Thread[default task-x](Running) 8 个条目。这些可能是实际的用户任务?
  4. Thread[XNIO-1 I/O-x](Running) 2 个条目。输入/输出到数据库?或任何文件,例如记录 e.q.?
  5. Daemon Thread [Transaction Reaper](Running)
  6. Deamon Thread [Transaction Reaper Worker 0](Running)
  7. Thread [Periodic Recovery](Running)
  8. 很多<not responding>。这实际上是什么意思?线程正在运行,但我不允许查看?

【问题讨论】:

  • 这是一个相当广泛的问题,但我怀疑您的问题与没有响应的线程有关。我想他们是那些正在努力旋转并吃掉你的 CPU 的人。
  • 您可能还想发出 kill -3 <pid of wildfly process> 让 Wildfly 将线程转储打印到标准输出(应该重定向到某个文件)。保存转储以供以后分析。
  • 您好 Kayaman,感谢您的提示。 <not responding> 线程在重启后消失了,性能变得相当好。下次出现问题时,我们将尝试打印线程转储。我仍然对所有其他线程堆栈条目的解释感兴趣,只是为了了解通常发生的事情。所以任何解释都会很棒!
  • 他们当然消失了。这就是为什么您需要重新启动之前收集所有可能的信息。至于其他线程,您拥有 Wildfly 的线程以及可能属于您正在使用的任何其他库的线程。这里涉及的范围太广,但是 Wildfly 的文档和一些谷歌搜索应该可以清除其中的很多内容。如果您设法将调试器附加到服务器,则可以查看线程正在做什么(或它们正在等待什么)并尝试从中推断出它们的工作。

标签: java eclipse multithreading remote-debugging wildfly-8


【解决方案1】:

一般来说,你可以看看 wildfly 中的线程子系统:

https://docs.jboss.org/author/display/WFLY8/Threads+subsystem+configuration

这个性能调优指南对于理解线程和线程池也非常有用:

http://www.mastertheboss.com/jboss-server/jboss-performance/wildfly-performance-tuning

你提到的线程类型是,AFAICT:

MSC 线程 是模块化服务容器线程。它们可以通过此处的配置进行限制:https://issues.jboss.org/browse/MSC-144 (-Dorg.jboss.server.bootstrap.maxThreads)

默认线程:线程子系统为各种任务定义的池中的 I/O 线程。

XNIO 线程:Undertow 依赖 XNIO API 使用 bounded-queue-thread-pool 创建 Worker 线程。 https://developer.jboss.org/thread/241230?start=0&tstart=0 - 这里有一些很好的性能调优技巧:http://www.mastertheboss.com/jboss-server/jboss-performance/wildfly-performance-tuning

weld-worker threads 是 CDI 实现使用的线程,可以这样配置:http://docs.jboss.org/weld/reference/latest/en-US/html/configure.html#_thread_pool_configuration。似乎weld为每个部署(https://issues.jboss.org/browse/WFLY-4653)保留了一个线程池,并且可以在standalone.xml中从WF9开始配置

Transaction Reaper 和 worker 负责监控 JTA 事务和超时等。http://www.mastertheboss.com/jboss-server/jboss-configuration/configuring-transactions-jta-using-jboss-as7-wildflyhttp://www.hhutzler.de/blog/a-deeper-dive-into-transaction-timeouts-with-jee7wildfly-and-oracle-rac/

周期性恢复线程:系统崩溃后,周期性恢复线程应使用 XA 恢复和 XA 提交来提交此事务,而无需任何用户干预。 http://www.hhutzler.de/blog/a-deep-dive-into-2-phase-commit-with-wildfly-and-oracle-rac/

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 2011-11-26
    • 2010-11-01
    • 1970-01-01
    • 2015-04-20
    • 2012-02-07
    • 2015-06-12
    相关资源
    最近更新 更多