问题现象
客户反馈,部分节点 /var/lib/docker目录磁盘占用100% 导致服务大面积异常,逐层排查,发现是 java_pidxx.hprof 文件 和core.xx文件占用。 本文提供解决方案及说明。

排查思路
通过命令逐层检查 /var/lib/docker 下的数据文件,发现 /var/lib/docker/overlay2/{容器目录}/diff/home/hive/目录下core和hprof文件很大,
容器目录通过如下命令检查,是inceptor-executor所在容器,到pod内/home/hive/也同样能够找到该文件
docker ps -q | xargs docker inspect –format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "bb66ed0498fe6ffdb33d361628d0f913dd2af1101a8bae25f3d67888f421ecce"

解决方案
问题原因:
从TDH4.5开始,inceptor executor 启动脚本中加入了出错后dump内存的参数:-XX:+HeapDumpOnOutOfMemoryError,该参数加入的目的是方便排查稳定性问题,不过启动参数只添加了-XX:+HeapDumpOnOutOfMemoryError,没有指定输出路径 -XX: HeapDumpPath,默认将文件输出到了docker目录。
而 core dump文件是在服务异常时会输出(这里暂时不提供解决方案,一般可以修改启动程序,加上ulimit -c 0)。
综上,如果 inceptor executor 出现OOM的话,输出的和hprof文件就会把docker目录打满。

解决方案:
a)临时解决方案: 重启这些 inceptor executor (可通过manager页面重启,或 后台 delete pod)
b)彻底解决方案:通过持久化镜像方式,修改 inceptor executor 的启动脚本 /bin/inceptor-executor.sh,删除或注释 脚本中的+HeapDumpOnOutOfMemoryError。
c)后续patch若已involve该修改,优先推荐使用patch的方式解决。