【问题标题】:Why does Java spawn so many processes?为什么Java会产生这么多进程?
【发布时间】:2014-10-19 14:25:49
【问题描述】:

我编写了一个在 debian 7 虚拟服务器上运行的 Java 服务器应用程序。应用程序本身运行良好,但我注意到一些非常奇怪的事情。

调用java -Xmx200M -jar "CCU.jar 后,我希望看到一个Java 进程运行我的CCU.jar

当调用top 时,只有一个 java 进程(如预期的那样)。但是当我打电话给htop 时,我得到了这个:

所有这些看起来是同一个进程(它们具有表中显示的完全相同的数据)但具有不同 PID 的子进程是什么?

【问题讨论】:

    标签: java process debian htop


    【解决方案1】:

    Java 应用程序永远不是单线程的(垃圾收集器线程等等)。所以你总是以几个线程结束。此外,Linux 将线程实现为Light-weight process,因此,每个Java 线程将在htop 中显示为具有唯一PID 的进程。

    【讨论】:

    • 好的。感谢您的回答。如果我的应用程序由 3 个没有客户端连接的线程(与主线程)组成,那么这么多线程会不会很奇怪?
    • 是的,好像有点高。你在使用 GUI 吗?
    • 没有。它是主线程和一个接受传入 TCP 连接的线程。但我将 JDBC 与 BoneCP 连接池一起使用。这可能就是所有线程的来源。
    • 所以有主线程、客户端acceptor线程和至少6个连接池线程。 JDBC 也使用 Log4J,它可能会产生线程。线数还奇怪吗?
    • 不,现在看起来很正常;)
    【解决方案2】:

    即使是最简单的 Java 应用程序也会使用多个线程来处理代码之外的事情。例如垃圾收集器、终结器线程等等。

    这么多线程表明您的应用程序中发生了一些多线程,因为 Java 不会为自己生成那么多线程。

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2018-03-03
      • 2012-08-08
      • 2013-05-22
      • 1970-01-01
      • 2013-03-10
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多