为啥Java会产生这么多进程?
Posted
技术标签:
【中文标题】为啥Java会产生这么多进程?【英文标题】: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 的子进程是什么?
【问题讨论】:
【参考方案1】:Java 应用程序永远不是单线程的(垃圾收集器线程等等)。所以你总是以几个线程结束。此外,Linux 将线程实现为Light-weight process,因此,每个Java 线程将在htop
中显示为具有唯一PID 的进程。
【讨论】:
好的。感谢您的回答。如果我的应用程序由 3 个没有客户端连接的线程(与主线程)组成,那么这么多线程会不会很奇怪? 是的,好像有点高。你在使用 GUI 吗? 没有。它是主线程和一个接受传入 TCP 连接的线程。但我将 JDBC 与 BoneCP 连接池一起使用。这可能就是所有线程的来源。 所以有主线程、客户端acceptor线程和至少6个连接池线程。 JDBC 也使用 Log4J,它可能会产生线程。线数还奇怪吗? 不,现在看起来很正常;)【参考方案2】:即使是最简单的 Java 应用程序也会使用多个线程来处理代码之外的事情。例如垃圾收集器、终结器线程等等。
这么多线程表明您的应用程序中发生了一些多线程,因为 Java 不会为自己生成那么多线程。
【讨论】:
以上是关于为啥Java会产生这么多进程?的主要内容,如果未能解决你的问题,请参考以下文章