背景:
后端服务迁移后可能会遇到oom,服务重启等问题,都是参数设置不当造成的,这里提供一个较为通用的参数配置供参考
可能的最佳实践
下面我们来看一下 Kubernetes 下面部署 Java 应用的资源限制该如何设置?我们需要考虑哪些因素?:
- requests != Xms 更准确的表述是:你的 requests 的值一定要设置的比 Xms 的值大,具体大多少这取决你的应用是否复杂,如果只是一个不复杂的应用,那么增加30%左右即可,但是如果他在 non-heap 外做了很多事情,那么你需要设置更大的值(这假设我们设置 Xms=Xmx )。
- limits != Xmx 同样的这里不能简单的将 limits 设置为 Xmx 的值,你需要仔细确认这个值。你可以参考腾讯云提供的一个设置规则:
容器内存 Request >= 1.25 * JVM 最大堆内存 ;
容器内存 Limit >= 2 * JVM 最大堆内存;
- 但我还是建议你做一些基准测试和压力测试,查看应用运行高峰时,内存的需求突发值是多少?如果你压测数据显示你设置的最大值明显过大,那么我们就适当降低该值以降低成本,他并不会导致 OOM 而引起 Pod 不断被驱逐的风险。
参考链接:https://www.cnblogs.com/xiaoqi/p/container-jvm.html
以下是效能平台上推荐的一组配置:
-XX:MaxRAMPercentage=50.0
CPU限额:500
CPU预留::300
内存限额:1024
内存预留:640
以上配置适配大部分应用,如果jvm堆大小需要自己修改,套用公式修改相应的限额和预留即可