java 伺服器應用程序必須為作業系統保留多少記憶體?
假設我正在使用 -Xms256m -Xmx1024m 執行 tomcat,但想增加我的堆使用量。
我可以分配的最大安全堆大小是多少?
對於這個問題,請假設系統有 5GB RAM,並且是 z/Linux 系統。但是,如果可能的話,我想要一個更廣泛的經驗法則答案。
另外,如果這是重複的,對不起。我很驚訝我沒有找到關於這種事情的更多資訊。
**不重複:**我看過這裡,但是,他的答案似乎只是猜測,沒有備份。該問題中的其他答案不是很清楚和/或特定於我的問題。1)我不是在 Windows 32 位系統上,2)我沒有問 PermGen,雖然它可能會在一個很好的答案中提到,3)第三個答案確實說“最後,你還必須考慮到其他在伺服器上執行並且也需要 RAM 的東西”但這不是一個準確的答案。我現在只是擔心作業系統的記憶體使用情況。
編輯: 這是專用系統,所以我最擔心作業系統記憶體使用情況。我不擔心其他程序。
GC
您要分配的最大堆大小將基於您的系統對其自身資源的使用率、您正在執行的其他服務等。您希望分配一個堆大小,以便為作業系統留下足夠的可用記憶體以防止不必要的記憶體分頁。這在 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 似乎更擅長自行維護這些值,而不是靜態分配它們。