在生產中,我們有一個CentOS 5 Linux機箱,它運行Apache 1.6.0_21上的多個Apache Tomcat 5.5.30實例。每個Tomcat都託管一個Java EE WebApp,它從Postgres 9.1 RDBMS中提取數據並生成HTML/PDF /等報告。
每隔幾天,由於觸發器尚未確定,其中一個Java進程將開始增加內存使用量(幾十個演出),直到機器開始將內存分頁爲HD,從而使整個服務器到達一個靜止的。 我通常會使用JProbe來監視對象正在消耗的所有內存,但由於服務器是無頭Linux安裝,這不是一個選項。
是否有一個無頭(CLI)工具可以定期記錄哪些Java對象消耗的內存最多?這甚至是診斷問題的最好方法嗎?如何診斷與生產linux內存相關的Java崩潰問題
UPDATE: 使用以下收到的反饋,我意識到問題的一部分是,我們沒有得到實際的碰撞,但流程剛剛頁面RAM到HD直到整個機器變得反應遲鈍。這個(我想)的一個解決方案是設置-Xmx參數,以限制Java可以使用的最大內存容量爲幾GB。不幸的是,JVM看起來好像忽略了這個設置,並且儘可能多的消費而不會崩潰。是否有另一種強制執行限制的方法?
你可以告訴JVM和操作系統版本。 – 2012-03-16 03:29:51
另外,請做一個ps -el | grep java併發送傳遞給進程的最終參數。 – 2012-03-16 04:20:38