徵兆:
訊息流量偶爾會降低,接著又恢復正常效能。
可能原因:
可能原因:代理程式的記憶體資源非常少。
因為未正確設定目標與代理程式限制,代理程式會採取越來越嚴格的動作,以防記憶體超載,這會導致在清除積存的訊息前,代理程式運作緩慢。
若要確認此問題的原因:檢查記憶體不足狀況下的代理程式記錄
[B1089]: In low memory condition, broker is attempting to free up resources
後面還有一個項目,描述新的記憶體狀態和所使用的記憶體總數。也請檢查 JVM 堆疊中可用的記憶體:
imqcmd metrics bkr -m cxn
JVM 記憶體總數接近 JVM 記憶體最大值時,可用記憶體會不足。
若要解決此問題:
調整 JVM (請參閱Java 虛擬機器調整)。
增加系統交換空間。
可能原因:正在執行 JVM 記憶體收回 (廢棄項目收集)。
記憶體收回程序會定期檢查整個系統,以釋放記憶體。發生此情況時,會阻斷所有執行緒。釋放出來的記憶體數量越多,JVM 堆疊的容量越大,因記憶體收回而導致的延遲時間就越長。
若要確認此問題的原因:監視電腦的 CPU 使用率。執行記憶體收回時,會大幅降低 CPU 使用率。
另外,請使用以下指令行選項以啟動代理程式:
- vmargs -verbose:gc
標準輸出會指出執行記憶體收回的時間。
若要解決此問題:在具有多個 CPU 的電腦中,設定同時執行記憶體收回:
-XX:+UseParallelGC=true
可能原因:JVM 使用及時 (Just-In-Time) 編譯器以提高效能。
若要確認此問題的原因:檢查是否有其他可能造成此問題的原因。
若要解決此問題:讓系統執行一段時間,效能應會改善。