2017-08-18 118 views
0

我遇到了一個我寫的java應用程序導致硬件性能問題的問題。問題(我相當確定)是,我運行應用程序的一些機器只有1GB的內存。當我啓動我的Java應用程序時,我將堆大小設置爲-Xms 512m -Xmx 1024m內存耗盡Xmx和Xms的一面

我的第一個問題是,我的假設是正確的,這顯然會導致性能問題,因爲我將所有機器內存到java堆?

這導致了另一個問題。我在應用程序上運行jconsole並監視應用程序的內存使用情況。我所看到的是該應用程序在啓動時消耗約30mb,達到約150mb垃圾收集器運行,它回落到30mb。我也看到使用頂部的pid的應用程序開始使用大約6%的內存,然後慢慢攀升到20%左右,我不明白這一點。爲什麼當我爲它分配1GB時,它只能達到20%的內存使用量,不應該達到100% 。此外,爲什麼當它沒有出現應用程序使用超過150MB的時候,它使用了那麼多的內存(20%)?

我認爲它很明顯我需要調整我的XMS和XMX,這應該可以解決問題,但我試圖更好地瞭解究竟發生了什麼。對於內存使用

回答

1

兩種可能性:

您的應用程序只是沒有使用多少內存

或者

您的應用程序不使用多少內存速度不夠快。

會發生什麼:

垃圾收集器有幾個點,在那裏將執行:

  1. 只是計劃:將清理容易刪除對象

  2. 全系列:這將運行當你達到設定的內存限制時。

如果選擇1,一般要低得多的影響快速收集,可以控制住你的內存使用,它不會打全收集,除非它的JVM GC選項設置爲運行一個完整的時間表。

在您的應用程序中,我將開始設置較低的xmx/xms值,以便爲OS保留更多的保證資源,並且可能會阻止某些分頁。