请教关于 k8 OOM 的问题

2023-04-26 09:11:02 +08:00
 hui9000

部署的 java 程序,有个服务会时不时的 OOM ,想要 dump ,增加了启动参数。 请问各位大佬,我怎么取出 dump ,需要 yml 怎么配置,实际生产应该怎么搞给点建议,谢谢;

1595 次点击
所在节点    Kubernetes
9 条回复
cheng6563
2023-04-26 09:14:49 +08:00
dump 那么大一坨,你得挂载个卷才行了。
wqsfree
2023-04-26 09:15:28 +08:00
Frankcox
2023-04-26 09:15:55 +08:00
如果就是要取出 dump ,可以 kubectl exec 进入容器执行 dump 命令,生成 dump 文件后 kubectl cp 出来到本地查看问题。
至于实际生产,这个应该要看你们公司的规范,这个我就不清楚了。
RRyo
2023-04-26 09:18:45 +08:00
挂个卷到
/opt/jvm/dump/
然后启动参数加
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/jvm/dump/heapdump.hprof
崩了之后卷里的东西不会丢,直接 kubectl cp 取,如果是挂的 nfs 之类的,直接从 nfs 取
Sum0l
2023-04-26 09:22:42 +08:00
1\2\4 楼结合起来
另外 java 程序可以设置 XX:MaxRAMPercentage 参数,提高 ram 的利用率
hui9000
2023-04-26 09:38:07 +08:00
@cheng6563 @wqsfree @Frankcox @RRyo
感恩大家
cmai
2023-04-26 09:52:38 +08:00
老问题了,我也提过相同的问题,你要考虑几个问题
1.当你的程序 OOM 的时候,POD 是不是也内存满了,你需要在你 POD 保活的前提下再去 dump ,不然还没 dump 完,pod 就被重启了

2.当你使用挂载卷的形式的时候,如果你有多个 java 程序,他们的 dump 文件是不是会互相覆盖呢?
Vraw5
2023-04-26 10:17:32 +08:00
要是没那么正规,node 节点你也能登录进去。可以直接 dump ,然后去 pod 对应的 node 上面,找到 pod 的磁盘目录,把 dump 拿过来
90xchun
2023-04-26 10:38:55 +08:00
建议你可以每个一段时间 dump 一次,其实不用真的 OOM 的时候再想着 dump 得。dump 文件如果是越来越大直接扔给开发看就可以了,如果是某个请求导致的,会复杂一些,可以加入 gclog 分析对应时间的请求。也可以尝试在测试环境使用更小的内存得,以不影响实际的产品环境得

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX