java 伺服器應用程式必須留給作業系統多少記憶體?

java 伺服器應用程式必須留給作業系統多少記憶體?

假設我使用 -Xms256m -Xmx1024m 運行 tomcat,但想增加堆使用量。

我可以分配的最大安全堆大小是多少?

出於本問題的目的,請假設系統具有 5GB RAM 並且是 az/Linux 系統。但是,如果可能的話,我想要一個更廣泛的經驗法則答案。

另外,如果這是重複的,抱歉。我很驚訝我沒有找到更多關於此類事情的資訊。

不重複:我在看這裡然而,他的回答似乎只是猜測,沒有任何依據。該問題中的其他答案不是很清楚和/或針對我的問題。 1)我不在window 32位元系統上,2)我沒有問關於PermGen,儘管它可能在一個很好的答案中提到,3)第三個答案確實說“最後,你還必須考慮其他在伺服器上運行並且也需要RAM 的東西」但這不是一個精確的答案。我現在只是擔心作業系統對記憶體的使用情況。

編輯: 這是專用系統,所以我最擔心的是作業系統記憶體使用情況。我不擔心其他程序。

GC

答案1

您要分配的最大堆大小將基於系統對其自身資源的利用率、正在運行的其他服務等。這在 Windows 中是一個更嚴重的問題,但在 Linux 中也存在這個問題(與 Linux 相比,我更像是 Windows 專家,對此感到抱歉)。

首先,您要檢查系統的資源利用率:http://www.cyberciti.biz/faq/linux-check-memory-usage/

接下來,您想查看頁面文件的配置方式:http://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/

然後,您將必須根據先前收集的資訊嘗試不同的配置,並觀察頁面檔案的使用率:http://www.cyberciti.biz/faq/linux-check-swap-usage-command/

如果您的頁面檔案被大量使用,那麼您的堆疊大小太大。如果它的使用很少,或者根本沒有使用,您可以嘗試增加堆疊大小以提高效能(不同Java 應用程式的實際效能結果會有所不同,並且增加堆疊大小可能會使某些應用程式效能更差,因為它們的方式不同)。

您需要確保分配適當數量的內存,以便您的作業系統有足夠的可用 RAM 來輕鬆維護頁面文件,並且您的應用程式有足夠的內存分配給它。在 Windows 中,我嘗試在負載下保持至少 25% 的可用 RAM。我會嘗試不同的配置並觀察您的系統效能。

但更重要的一點是:在 Java 8 中,您根本不需要定義這些項,Java 8 似乎更擅長自行維護這些值,而不是靜態分配它們。

相關內容