容器环境JVM内存配置最佳实践

本文介绍了在容器环境中,如何通过-XX:MaxRAMPercentage和-Xms -Xmx来合理配置JVM内存,避免OOM问题。推荐使用-XX:MaxRAMPercentage,但需要注意规格变化和参数设置。同时,通过-Xms -Xmx限制堆大小,可能导致容器提前因OOM被关闭。文章还解答了常见问题,如137退出码、堆大小与规格内存的关系以及JDK 8中设置MaxRAMPercentage的整数报错问题。
摘要由CSDN通过智能技术生成

背景信息

当您的业务是使用Java开发,且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题。特别是在容器环境下,不合理的JVM堆参数设置会导致各种异常现象产生,例如应用堆大小还未到达设置阈值或规格限制,就因为OOM导致重启等。

通过-XX:MaxRAMPercentage限制堆大小(推荐)

在容器环境下,Java只能获取服务器的配置,无法感知容器内存限制。您可以通过设置 -Xmx 来限制JVM堆大小,但该方式存在以下问题:

  • 当规格大小调整后,需要重新设置堆大小参数。

  • 当参数设置不合理时,会出现应用堆大小未达到阈值但容器OOM被强制关闭的情况。

说明

应用程序出现OOM问题时,会触发Linux内核的OOM Killer机制。该机制能够监控占用过大内存,尤其是瞬间消耗大量内存的进程,然后它会强制关闭某项进程以腾出内存留给系统,避免系统立刻崩溃。

推荐的JVM参数设置

-XX:+UseContainerSupport 
-XX:InitialRAMPercentage=70.0 
-XX:MaxRAMPercentage=70.0 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-Xloggc:/home/admin/nas/gc-${POD_IP}-$(date '+%s').log 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/home/admin/nas/dump-${POD_IP}-$(date '+%s').hp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值