我試圖調整某種高負載應用程序,即將數據從一個雲端流式傳輸到另一個預處理端口。 我的應用程序的具體內容是廣泛的內存使用和低CPU消耗。 我用jconsole監控了應用程序,並且發現了一些有趣的圖片--CPU加載了15%,我仍然捕捉到了內存不足的錯誤。內存不足,CPU消耗低
從jconsole手動觸發「執行GC」會清除所有代中的大量內存,所以我假設應用程序中沒有內存泄漏。我試圖在單個虛擬CPU之間切換到具有各種GC的多CPU(-XX:+ UseG1GC; -XX:+ UseParallelGC,無需其他調整),並且圖片實際上是相同;
- 那麼,爲什麼GC不使用CPU來釋放內存?
- 我們可以調整GC以進行更頻繁/正確的工作嗎?
是什麼「內存不足」是指在這種情況下?你會得到OuOfMemoryException?這似乎不大可能,因爲您說手動調用GC時內存已被釋放。如果你沒有得到例外,你的問題是什麼? – Axel
也許你正在分配一些如此之大的東西,甚至GC也不會清除足夠的內存,在這種情況下,我認爲系統甚至可以毫無困難地執行GC操作。 – john16384
獲取堆轉儲,看看有什麼在內存中 – Vipin