起因: 发现k8s的服务出现频繁重启的情况, 页面上多点几次百分百必现
推测: 内存不足引起
于是先查看k8s服务, 使用命令kubectl get pod service-name
, 果不其然
发现k8s容器的最小和最大资源都只分配了1G, 可参考博客:
Kubernetes中requests和limits是干嘛的
那么, 尝试着调成2G看看~
k8s配置1G.png k8s配置2g.png调成2G之后, 发现不会重启了, 但是一段时间之后, 在频繁访问下, 再次出现重启的情况, 查看k8s服务, 依然是内存溢出...
那肯定是配置还存在错误了, 再仔细一看, 发现jvm的最大堆内存设置成和容器最大内存一样了
由于java运行时占用的内存是可能大于-Xmx
堆内存的, 因此 -Xmx
的值是不能等于或大于limits
的, 可参考博客: jvm设置了-Xmx, 但实际运行内存还是超过了它?
找到原因之后就好办了, 配置时只要保证JVM最大堆内存小于容器最大内存就没问题了, 于是配置如下, 问题解决
配置原则:
至于为什么推荐-Xms = -Xmx
, 可参考博客: jvm -Xms和-Xmx设置一样有什么好处
网友评论