我有一個運行在Tomcat上的Java應用程序(作爲Windows上的服務運行),java進程在最終要求我重新啓動之前繼續佔用CPU Tomcat服務。排除非常高的CPU使用率的Java進程 - Tomcat應用程序
首先我的設置: 在Windows 2003服務器 的Tomcat 6,運行在使用包裝 JDK服務:1.6.0_20
我在這裏看到的漁獲物問題,有領導到昨天。我必須在昨天中午重新啓動,然後在今天凌晨2:30,然後今天我幾乎不能重新啓動應用程序,並打開jconsole進行監視,然後再次使用99%的CPU。通過一些我不太確定的事情,看起來我有JVM自行循環,應用程序在10-30%的CPU使用範圍內徘徊了幾個小時。然而,它又開始爬起來,最終進入其99%的CPU使用率細分。我也遇到了高內存使用的問題,但由於我所謂的讓JVM「循環」(壞的術語也許,但它看起來確實如此),並且在包裝器日誌中保持相當正常和穩定有一個所有正在重新加載的類的轉儲)。
然後我四處挖掘,發現在服務器上安裝了JRE 6 Update 24(我沒有安裝它,因爲我對每個java更新進行了全面測試 - 但也許我的服務器管理員進行了更新)。我嘗試過,但無法卸載。因此,我得到不同的版本時,我做了java -version
與javac -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,設置env變量,清理並重建,然後啓動。這看起來更穩定,並且已經持續了大約4個小時。 CPU使用率已經上升到了90年代,然後它似乎再次清除了。我已經做了heapdumps,然後通過Eclipse中的內存分析器(他們沒有發現新的東西)運行它們,我使用jconsole和jtop來查看線程 - 沒有任何東西跳出來,因此,爲什麼我繼續好奇,如果它是一個java/jvm問題。所以,我知道這是一個很長的帖子 - 但我真的不知道該從哪裏出發。有任何想法嗎? (我已經在這方面做了詳盡的網絡搜索,一些文章指出可能是Quartz問題或者Hibernate查詢沒有刷新。自從我開始看到CPU問題後,應用程序中沒有任何更改,所以我不確定在哪裏可以開始故障排除,如果它確實可以鏈接到任何一個)。
感謝您的回覆。我確定了一個應用程序代碼問題,我認爲這是一個問題。自從保存一次之後不久,它就穩定下來了,所以我希望儘可能好,儘管我仍然在分析它並試圖找到其他任何可能的代碼問題。 –