springboot应用容器化时,被k8s杀死,OOMKiller

林小宝 发布于 2019/09/06 14:59
阅读 259
收藏 0

最近迁移到docker服务化,容器多配置了内存限制,目前差不多是 1g 初始化,2g最大容器内存。

现有的jvm 配置为 -Xms512m -Xmx1024m

 

原先 使用 jdk 1.8.0_121 版本,jvm无法感知容器内存,一直被杀死,

最近升级到最新版本的jdk 1.8.0_221 版本,

添加 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

容器比以前更抗压力,但是还是会发生被容器杀死,

请问一下你们线上的服务都是一个什么样的配置????

加载中
0
gammey
gammey

k8s可以设置限制容器的内存

gammey
gammey
回复 @林小宝 : 那我估计还真是节点内存不够,如果平常使用超过50%,再要处理掉这个任务,你这个很有可能是节点内存不够的原因。 还不行就做成队列锁,开始处理加个3分钟的锁,处理完成把锁去掉,记录为操作完成。3分钟内没处理完成,视为处理失败,锁自动释放,另外一个消费者从队列获取再进行操作。
林小宝
林小宝
回复 @gammey : 容易产生脏数据。因为业务正处理一半,就被容器杀死了。
gammey
gammey
回复 @林小宝 : 有条件就把监控做起来,然后再scale一下,毕竟都K8S了,项目会越来越大,到时候几百个应用根本差不过来,这种细节问题不会每个都去关注的。做到高可用,挂了让他能再起来,不影响用户就行了。
林小宝
林小宝
回复 @gammey : 观察宿主机感觉没有内存问题。
gammey
gammey
回复 @林小宝 : 系统内存不够会直接kill进程,就会oomKiller,表现来看就是容器里的进程结束了。scale多少个看你具体业务情况了,如果是tomcat一类的,看节点足够的话3差不多了。
下一页
返回顶部
顶部