簡體   English   中英

在Java中調整垃圾收集參數

[英]Tuning Garbage Collection parameters in Java

我有一個服務器java組件,它在啟動時具有巨大的內存需求,逐漸消失。 因此,作為啟動時的一個例子,內存要求可能會達到4g; 在最初的激增結束后,將降至2g。 我已經將組件配置為以5g的內存開始,組件啟動良好; 使用過的內存激增至4g,然后接近2g。 此時堆消耗的內存仍然在4g左右徘徊,我想降低它(基本上將可用內存保持在幾百mb而不是2g。我嘗試使用MinFreeHeapRatio和MaxFreeHeapRatio將它們從默認值降低但這導致在初始峰值期間初始運行后沒有觸發垃圾收集,並且使用的內存保持在高於平常水平。任何指針都會有很大幫助。

首先,我問你為什么擔心在服務器上釋放2 GB的ram? 2GB的內存約為100美元或更少。 如果這是在桌面上,我想我可以理解這個擔心。

如果您確實有充分的理由考慮它,這可能與您正在使用的垃圾收集算法有關。 有些算法會將未使用的內存釋放回操作系統,有些則不會。 http://www.stefankrause.net/wp/?p=14上有一些與此相關的圖表。 您可能想嘗試G1收集器,因為它似乎很容易將內存釋放回操作系統。

從評論中編輯如果他們都選擇一次最大化他們的負載怎么辦? 你還好嗎,他們中的一些人將內存分頁到磁盤並使服務器速度變慢? 我會在具有足夠內存的服務器上運行它們以在最大堆上運行所有應用程序,+另外4-6GB用於OS /緩存。 具有32或64 GB的服務器非常常見,您可以獲得更多。

您必須記住,JVM在啟動時保留虛擬內存,並且永遠不會將其返回給操作系統(直到程序退出)您最希望的是未使用的內存被換出(這不是一個好的計划)如果你不喜歡不希望應用程序使用超過一定數量的內存,您必須將其限制為該數量。

如果你有許多使用內存峰值的組件,你應該考慮重新編寫它們以在啟動時使用更少的內存或在同一個JVM中使用多個組件,這樣額外的內存就不那么重要了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM