阿里云國際站經銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優(yōu)惠大,聯系客服飛機@jkkddd
背景信息
當您的業(yè)務是使用Java開發(fā),且設置的JVM堆空間過小時,程序會出現系統內存不足OOM(Out of Memory)的問題。事件中心的OOM事件是指系統內存不足時,觸發(fā)了Linux的內存回收(OOM Killer)機制,此時系統會終止內存占用較多的進程以保證系統的正常運行。特別是在容器環(huán)境下,不合理的JVM堆參數設置會導致各種異常現象產生,例如應用堆大小還未到達JVM設置的堆閾值或應用的規(guī)格限制,就因為OOM導致重啟等。
通過-XX:MaxRAMPercentage限制堆大?。ㄍ扑])
在容器環(huán)境下,Java只能獲取服務器的配置,無法感知容器內存限制。您可以通過設置-Xmx來限制JVM堆大小,但該方式存在以下問題:
當規(guī)格大小調整后,需要重新設置堆大小參數。
當參數設置不合理時,會出現應用堆大小未達到閾值但容器OOM被強制關閉的情況。
通過-Xms -Xmx限制堆大小
您可以通過設置-Xms和-Xmx來限制堆大小,但該方式存在以下兩個問題:
當規(guī)格大小調整后,需要重新設置堆大小參數。
當參數設置不合理時,會出現應用堆大小未達到閾值但容器OOM被強制關閉的情況。
常見問題
容器出現137退出碼的含義是什么?
當容器使用內存超過限制時,會出現容器OOM,導致容器被強制關閉。此時業(yè)務應用內存可能并未達到JVM堆大小上限,所以不會產生dump日志。建議您調小JVM堆大小的上限,為容器內其他系統組件預留足夠多的內存空間。
為什么發(fā)生OOM卻沒有生成dump文件?
當發(fā)生OOM Killer時,并不一定會發(fā)生JVM OOM,所以不會生成dump文件。您可以采取以下方式來避免這種情況。
如果是Java應用,可以適當調小JVM的堆內存大小。具體配置,請參見本文。
如果是非Java應用,可以調整實例規(guī)格,保證充裕的內存資源。具體配置,請參見變更實例規(guī)格。
堆大小和規(guī)格內存的參數值可以相同嗎?
不可以。因為系統自身組件存在內存開銷,例如使用SLS進行日志收集時會占用一小部分的內存空間,所以不能將JVM堆大小設置為和規(guī)格內存大小相同的數值,需要為這些系統組件預留足夠的內存空間。
在JDK 8版本下設置-XX:MaxRAMPercentage值為整數時報錯怎么處理?
這是JDK 8的一個Bug。具體信息,請參見Java Bug Database。例如,在JDK 8u191版本下,設置-XX:MaxRAMPercentage=70,此時JVM會啟動報錯。
為什么JVM參數設置了6 GB,但是內存使用率卻很低?
雖然JVM參數已設置-Xms6g -Xmx6g,但是操作系統不會馬上分配6 GB的物理內存,需要實際使用后才分配。因此,內存使用率在應用啟動的時候,會相對較低,后續(xù)會出現攀爬現象。
心靈雞湯:
標題:阿里云賬號購買,阿里云賬號24h自助充值
地址:http://www.byhjt.com/kfxw/64414.html