供应商反应测试环境里面自己的java应用频繁重启,排查之
kubectl describe pod,看了下重启了4次,Terminated,退出code 137
看到137基本心里有数了,登录top看了下,java进程吃了7个g内存,free看了下宿主机可用内存所剩无几,ps -ef看下java启动命令,-XX后面跟着一串按比例吃资源的参数
查看yaml,果然没设置资源上限,java进程直接按宿主条件去要资源,后面又持续新增内存要求,宿主机内存不够把他给砍了
配置4g资源上限后重启,对比监控数据可以看到,原本无上限启动后就占了5g,设置上限后重启应用只占了1g多,效果明显
使用java -XX:+PrintFlagsFinal -version | grep HeapSize查看堆内存情况,JVM 根据系统的内存总量,来自动管理堆内存,不明确配置堆内存的默认限制是物理内存的四分之一,这里看到MaxHeapSize换算下来是1g,正好是我们设置的4g的四分之一
ps:看到案例说容器可能会看不到外部设置的资源上限,不清楚这里是不是原生和云厂商平台的区别,如果出现这种情况,用JAVA_OPTS=’-Xmx512m -Xms512m’这个系统变量进行设置就行了

标签: none

评论已关闭