【问题标题】:Why doesn't VisualVM display daemon threads on Linux?为什么 VisualVM 在 Linux 上不显示守护线程?
【发布时间】:2012-03-09 18:02:26
【问题描述】:

我在 Linux 上遇到了守护线程的问题。我在 Windows 服务器上的应用程序工作正常,当我创建线程转储时,我可以查看线程是否为守护进程。

但是当我将我的应用程序移动到 Linux 服务器上的 Tomcat 并使用 Java Visual VM 创建转储时,我再也看不到线程详细信息中的守护进程了。

这是否意味着守护线程只能在 Windows 上工作?是否有一些解决方法或者我们是否需要在应用程序退出时关闭每个线程?

【问题讨论】:

  • 守护线程在 Linux 上运行良好。我无法帮助您使用 visualvm,也许您有两个不同的版本?

标签: java linux multithreading daemon


【解决方案1】:

http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads.html - 这似乎表明 Visual VM 可以很好地处理普通线程和守护线程。我在 Visual Vm 中使用了实时监视器,它在 Linux 上运行良好。

但是当我将我的应用程序移动到 Linux 服务器上的 Tomcat 并使用 Java Visual > VM 创建转储时,我再也看不到线程详细信息中的守护进程了。

您可以只显示示例输出吗?

这是否意味着守护线程只能在 Windows 上工作?

不!守护线程在 Linux 上运行良好。

是否有一些解决方法或者我们需要在应用程序退出时关闭每个线程?

当进程终止时,操作系统会负责获取所有相关资源,包括线程。所以,你不需要做任何事情。事实上,顺便说一句,JVM 不允许你直接处理线程的生命周期。

【讨论】:

  • "thread-1" - 线程 t@101 java.lang.Thread.State: TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - 停车等待 ...
  • 没有优先级和守护进程,在Windows上我可以看到:
  • 可能取决于是否在调试模式下启动了tomcat?
【解决方案2】:

您似乎正在通过 JMX 连接监控您的应用程序。在这种情况下,有关守护程序/非守护程序线程类型的信息不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2011-10-27
    相关资源
    最近更新 更多