簡體   English   中英

對 CPU 使用率非常高的 Java 進程進行故障排除 - Tomcat 應用程序

[英]Troubleshooting Java process with very high CPU usage - Tomcat application

I have a java application that runs on Tomcat (which runs as a service on Windows), the java process for which continues to eat up CPU before eventually requiring me to restart the Tomcat service.

首先我的設置:Windows 2003 服務器 Tomcat 6,使用 Wrapper JDK 作為服務運行:1.6.0_20

直到昨天,我在這里和那里看到了捕獲問題。 我昨天中午不得不重新啟動,然后在今天早上 2:30,然后今天我幾乎無法重新啟動應用程序並打開 jconsole 來監視它,然后它再次達到 99% 的 CPU 使用率。 通過一系列我不太確定的事情,似乎我讓 JVM 自行循環,並且應用程序在 10-30% 的 CPU 使用率范圍內徘徊了幾個小時。 然而,隨后它又開始爬升,最終進入了 99% 的 CPU 使用率細分。 我也遇到了 memory 使用率高的問題,但是自從我所謂的 JVM 到“循環”(也許是不好的術語,但這確實是它似乎在做的事情 - 並且在包裝器日志中)有一個它正在重新加載的所有類的轉儲)。

然后我又挖了一些,發現服務器上安裝了 JRE 6 Update 24(我沒有安裝它,因為我對每個 java 更新進行了徹底測試 - 但也許我的服務器管理員做了更新)。 我嘗試過,但無法卸載它。 因此,當我執行java -versionjavac -version時,我會得到不同的版本

java -version
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
    Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)

javac -version
    javac 1.6.0_20

這種差異會導致 JVM 沖突嗎? JAVA_HOME 和我的 PATH 變量都指向正確的 JDK 安裝。

希望獲得更高的穩定性,我決定將我的應用程序更改為在仍然安裝的以前的 JDK 上運行 - JDK 1.6.0_04。 我更改了 wrapper.conf,設置環境變量,清理並重建,然后開始。 這看起來確實更穩定,並且已經持續了大約 4 個小時。 CPU使用率已經攀升到90年代,然后它似乎再次自我清除。

我已經完成了堆轉儲,然后通過 Eclipse 中的 Memory 分析器運行它們(那里沒有發現任何新內容),我使用 jconsole 和 jtop 來查看線程 - 什么都沒有跳出來,因此我為什么繼續好奇它是否是 java/jvm問題。 所以,我知道這是一篇很長的帖子——但我真的不知道 go 從這里到哪里。 有任何想法嗎?

(我已經對此進行了詳盡的 web 搜索,並且一些文章指出可能是 Quartz 問題或 Hibernate 查詢未刷新。自從我開始看到 CPU 問題以來,應用程序中沒有任何變化,所以我不確定從哪里開始進行故障排除如果它確實可以鏈接到任何一個。)

這不是一個容易的問題。 你正在做所有的基礎工作,看看是否有什么東西跳出來。 聽起來好像存在緩慢的泄漏,隨着時間的推移逐漸累積到無法運行的程度。 這聽起來像 GC 正在顛簸,應用程序沒有響應。 它也可能是失控的后台作業占用 CPU 並且沒有完成,這可能解釋了長時間的延遲。 您可以嘗試關閉任何石英,看看它是否能保持更長時間,這可能有助於引導您朝某個方向前進,或者將其調高以便它更快出現。

我知道您已經觀看了一些 jconsole,但我認為您需要重新訪問並觀察您的 memory 使用情況、線程運行時間、您在 GC 中花費了多少時間,以及觀察 memory 的哪些部分被吃掉(是它的伊甸園,任期即將結束?)。

我會確保您正在為在 Quartz 中運行的后台作業編寫開始和結束消息。 然后,您可以將它們的開始時間和結束時間與此問題開始的時間關聯起來。 還會告訴您您的工作是否完成。

可能是時候將其放入分析器(而不是 jconsole)中了,這樣您就可以看到它在代碼中的哪些地方花費了時間,或者 memory 發生了什么故障。 一個真正的分析器將讓您看到所有數據混搭在您的代碼和類上。 我最喜歡的是 JProfiler,但 YourKit 也不錯。 您可以獲得 7-30 天的試用期,因此您將有足夠的時間來分析和解決您的問題,而無需購買它。

從一大早開始,這樣你就有希望在深夜看到一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM