图书馆馆建设网站,如何把地图放到网站上,seo关键词优化公司,泰安市景区建设网站背景
数据服务平台南海容器k8s设置的内存上限2GB#xff0c;多次容器被OOM killed。
启动命令
java -XX:MaxRAMPercentage70.0 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/apps/logs/ ***.jar排查过程
1 当收到实例内存超过95%告警时#xff0c;把jvm进程堆dump下…背景
数据服务平台南海容器k8s设置的内存上限2GB多次容器被OOM killed。
启动命令
java -XX:MaxRAMPercentage70.0 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/apps/logs/ ***.jar排查过程
1 当收到实例内存超过95%告警时把jvm进程堆dump下来后用visual vm分析堆内存并未发现内存泄漏。推测进程就需要花较多的内存是内存分配不够。遂将内存增加到4GB。继续观察
2 南海和顺德docker实例依然OOM killed。 当实例内存超过95%时dump出堆内存并分析依然没有发现内存泄漏比较正常。
3 怀疑是容器内部除了java的其他进程耗用了容器内存。当实例内存超过95%时对比top显示的的jvm进程内存和ps stats输出的docker实例内存信息其余进程耗用的内存忽略不计。
4 由于堆内存没有的到达上限但是整个jvm进程内存超出了容器的内存限制。因此推测是对外内存本地内存栈内存等元数据空间等耗用较大执行命令
/****/jcmd 1 VM.native_memoryVM.native_memory特性并未开启。
5 观察到一个现象docker进程被oom killed之前java应用堆内存并没有被Full gc。并且堆内存没有用到上限值2.8GB(4 * 0.7)。docker是go语言编写并没有GC的能力。docker耗用完内存前堆内存并没有达到上限于是没有触发老年代GC内存没有降下去。当堆内存不够的时候依然会找docker容器申请内存。
6 修改jvm配置将南海的MaxRAMPercentage降到60 南海分组的堆内存上限变成2.4GB(4 * 0.6),顺德分组不变。并增加-XX:NativeMemoryTrackingsummary配置。8.18日重启所有实例使新增的配置生效。观察一段时间
发现南海分组的full gc更加频繁继续观察
结论
如果容器OOM killed容器里的jvm进程没有Full GC那么肯定是MaxRAMPercentage参数太高导致堆内存没有用到上限无法触发堆内存老年代GC。这个情况下就需要把MaxRAMPercentage参数适当调低。