Linux

Java程序吃CPU;為什麼?

  • January 5, 2011

我有一個安裝了 Java 的 Linux 伺服器。

有時,而且只有在有大量訪問者訪問我的網站時,網站才會掛起。

當我打開終端並輸入“top”命令查看發生了什麼時,我可以看到“ Java”程序正在吃CPU!像400%。

我也試過ps aux命令,可以看到命令來自usr/bin/java

我對這類事情的故障排除經驗很少,所以我向你們尋求幫助。

我安裝了一個 java 容器(Jetty),為了使用集成到我的網站中的SOLR (搜尋引擎),我必須擁有它。

我可以通過以下方式啟動和停止 SOLR:

 etc/init.d/solr stop

但這並沒有從“Top”命令中刪除 java 程序。仍然 java 正在吃掉 400% 的 CPU。

還有其他方法可以僅重新啟動java嗎?

這在我身上發生了兩次,現在每次我都重新啟動了我的整個伺服器,一切都很好。

如果您需要更多輸入,請告訴我!

如果你停止了 solr 程序並且一個 java 程序仍在執行,那麼你的伺服器上還有另一個 java 程序。第一步是記錄所有正在執行的 Java 程序。在 Unix 上一個很好的工具是該ps工具。試試這個:

$ ps auxwww | grep java

該輸出應該向您顯示所有正在執行的 java 程序以及正在執行的命令。在停止 solr 之前和之後嘗試此操作。

第二個問題是“這些 java 程序中的哪個程序佔用了這麼多 CPU”?除了 solr 程序之外,您可能還需要停止 jetty 程序。此外,您永遠不應該僅僅因為單個程序行為不端而真正需要重新啟動 Linux 伺服器。kill如果您現在是程序 id,您還可以使用該命令停止程序,您可以從top或中獲取它ps

在短期內,在您的機器上安裝某種“看門狗”腳本來幫助解決這些情況可能是個好主意。例如,monit可用於在消耗一定量的 CPU 資源時自動重啟服務或程序。

從長遠來看,很抱歉您遇到了性能問題。您至少需要考慮重新配置 solr 和 jetty。您可能還需要研究垃圾收集調整併可能添加更多硬體。網上有很多關於這些主題的資訊,很抱歉,這個過程可能有些困難。

祝你好運!

湯姆·普爾

引用自:https://serverfault.com/questions/218663