Java 进程占用 CPU;为什么?

Java 进程占用 CPU;为什么?

我有一台 Linux 服务器,上面安装了 Java。

有时,而且只有有时,当大量访问者访问我的网站时,网站才会挂起。

当我打开终端并输入“top”命令查看发生了什么时,我可以看到“ Java”进程正在消耗 CPU!就像400%。

我也尝试过ps aux命令,并且可以看到命令来自usr/bin/java

我对解决此类问题的经验很少,因此我向你们寻求帮助。

我安装了一个 Java 容器(码头)我必须拥有才能使用太阳能路灯(搜索引擎)已集成到我的网站中。

我可以通过以下方式启动和停止 SOLR:

  etc/init.d/solr stop

但这并没有从“Top”命令中删除 java 进程。java 仍然占用了 400% 的 CPU。

还有其他方法可以仅重新启动 Java 吗?

这种情况已经发生过两次了,每次我都重新启动了整个服务器,一切就正常了。

如果您需要更多输入请告诉我!

答案1

如果您停止 solr 进程,而 java 进程仍在运行,则您的服务器上还有另一个 java 进程。第一步是记录所有正在运行的 Java 进程。Unix 上用于此目的的一个好工具是 工具ps。试试这个:

$ ps auxwww | grep java

该输出应显示所有正在运行的 java 进程以及正在执行的命令。请在停止 solr 之前和之后尝试此操作。

第二个问题是“这些 java 进程中哪一个占用了这么多 CPU”?除了 solr 进程之外,您可能还需要停止 jetty 进程。此外,您永远不需要仅仅因为一个进程行为不端而重新启动 Linux 服务器。kill如果您知道进程 ID,也可以使用命令停止进程,您可以从 或 中获取进程topID ps

短期内,在您的机器上安装某种“看门狗”脚本来帮助解决这些情况可能是一个好主意。例如,monit当服务或进程消耗一定量的 CPU 资源时,可用于自动重新启动它。

从长远来看,很遗憾地说,您遇到了性能问题。您至少需要考虑重新配置 solr 和 jetty。您可能还需要考虑垃圾收集调整,并可能添加更多硬件。网上有很多关于这些主题的信息,很遗憾地说,这个过程可能有点困难。

祝你好运!

汤姆·普尔

答案2

如果 CPU 达到最大容量而响应时间却在下降,那么我首先要查看的是 Java 中的堆管理 - 它可能正在进行大量的主要收集 - 解决问题的最快方法就是为容器提供更多内存来运行。

答案3

这里确实不是询问程序调试问题的合适地方。如果 Solr 是唯一运行的 Java 应用程序,您一定要检查 Lucene 索引的更新频率以及服务器启动时过载时您每秒运行的搜索查询数。

相关内容