求助>docker设置xmx后,随着时间运行,老年代越来越大,年轻代越来越小,最后被k8s重启>
15回复
1年前

docker设置xmx后,随着时间运行,老年代越来越大,年轻代越来越小,最后被k8s重启


java 
-Xmx512m -Xloggc:./gc-xx-pro-docker.log -XX:NativeMemoryTracking=detail 
-XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC 
-XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/xx-test/xx-pro.hprof -Dspring.profiles.active=prod 
-jar xx-vservice.jar

docker 资源限制:

所需资源	Memory: 700M
资源限制	Memory: 800M

gc日志文件:gcxxprodocker.log
问题难以定位,所以在真机也测试下
真机下的gc不一样 :gcxxprodockernon.log

5601 阅读
请先登录,再评论

这个Java版本太老了,如果不设置Xmx,无法感知Docker的限制,按操作系统可用内存创建堆,肯定会被kill掉。https://royvanrijn.com/blog/2018/05/java-and-docker-memory-limits/ 限制设置了Xmx,还是被kill掉,是不是说明JVM进程内存占用超过了Docker的限制?堆外内存有问题?metaspace,thread stack,direct buffer等等。

11年前
回复 csyangchsh:

nice,我也看过误以为jdk9才可以, 我都升级到过8u121,我升级最新看看 u131+
只是这里每次分配 docker max -200m 然后给堆,是不是合适,有没有必要做,不然都会docker linux os kill

1年前回复

微信图片_20200304102544.png看图中分配的新生代大小已经接近100%而没有回收,这里的原因导致k8s重启,建议可以指定调大新生代分配的大小试下

1年前
回复 Loubobooo:

没看到亲说的情况呀,monitor gc每次都回收了年轻代呀,只是后面每次gc之后年轻代越来越小,老年代越来越大

1年前回复

https://opts.share.perfma.com/result/generate/Oo7Ez

-Xmx448M -Xms448M -Xmn128M -XX:MaxMetaspaceSize=64M -XX:MetaspaceSize=64M -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy -XX:MaxGCPauseMillis=100

可以看下这个推荐配置

1年前
回复 舒风:

完整的内容做附件传上来?

1年前回复
回复 你假笨:

上面有回复,请博主指点

1年前回复
回复 舒风:

大神,您好!这个问题一直没有解决,这个启动之后 Native Memory Tracker 比较的内容

目前定位是: docker 配置内存限制之后,不会进行fullGc,最后被系统kill掉 进程

1年前回复
查看更多