2016-10-25 59 views
0

我們在prod環境中的應用程序在生成頻繁的堆/線程轉儲時運行非常大的報表,最終導致JVM故障。 WebSphere是所有節點上的服務器和堆大小設置爲1024/2048(初始/最大)。Websphere - 生成頻繁的線程/堆轉儲

有什麼方法可以解決這個問題?我可以考慮以下選項。還有什麼我失蹤?

  1. 將最小/最大堆大小設置爲2048甚至更高?

  2. 在WebSphere中啓用詳細垃圾收集並分析最佳堆大小?

螺紋分析: 可運行:123(67%) 封鎖:16(9%) 等待上條件:43(23%)

+0

你有webphere-MQ標記,但我沒有看到MQ的任何提及這個問題。您是否應該爲App Server專家添加一些標籤來查看此問題? –

+0

作爲轉儲創建觸發器的轉儲記錄是什麼? OutOfMemoryError異常? –

+0

@MoragHughson:感謝指針,它應該是websphere而不是websphere-mq。 –

回答

0

由於您看到您遇到OutOfMemory問題,因此需要考慮三種可能性:

  • 您的應用程序始終需要更多的內存來處理當前的負載。

解決方案:你必須負載測試你有相應的生產類業務和調整您的最小/最大堆大小的應用程序。

  • 您有內存泄漏問題。

:使用IBM Support Assistant tools分析heapdumps /核心轉儲製備。 PMR到IBM會有所幫助。

  • Websphere有內存泄漏。

解決方案:打開PMR

這裏是一個nice read關於Java的內存管理的WAS環境。

0

嘗試從生產環境中捕獲內存,垃圾收集信息。我不確定GC日誌是否有任何性能影響。但是,jstat是一個非常輕量級的工具,可以在生產環境中使用,不會對性能造成任何影響。轉儲jstat輸出在使用下面的命令(在這裏,我的時間間隔設置爲1小時)定期:

jstat -gc <PID> 3600s