Java程序吃CPU;為什麼?
我有一個安裝了 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。您可能還需要研究垃圾收集調整併可能添加更多硬體。網上有很多關於這些主題的資訊,很抱歉,這個過程可能有些困難。
祝你好運!
湯姆·普爾