我们注意到,只要JVM的垃圾回收持续时间过长,我们的Kubernetes容器(Google容器引擎)就会重新启动。
具体来说,似乎任何时候都可能会跨越20秒,这会导致豆荚重启。
1)JVM不会耗尽堆内存。它仍然不到分配的堆的20%。只是很长一段时间,特定的GC周期需要很长时间(可能是由于当时该Pod磁盘上的IO)
2)我尝试将活动性检查参数调整为periodSeconds = 12,failureThreshold = 5,以便活动性检查过程等待至少12 * 5 = 60秒,然后再确定吊舱已变得无响应,并替换为一个新的,但是一旦GC暂停时间超过20-22秒,它仍会重新启动广告连播。
有人可以评论为什么可能会发生这种情况吗?还有什么我可以调整以不重新启动此GC暂停上的Pod?很遗憾,因为仍然有很多堆容量可用,内存并不是真正应该更换内存的原因。
答案 0 :(得分:1)
找到了。
除了将periodSeconds设置为12之外,我还不得不将timeoutSeconds从默认的1秒调整为5秒,以使其等待〜60秒,然后将Pod标记为无响应。