现象
之前某个后端服务pod一直在不停的重启导致线上环境很不稳定,于是开始分析问题的原因
分析pod日志和服务器日志
- 执行
kubectl describe po <pod名> -n <命名空间>查看pod所在Node的ip和Events有时候通过Events可以直接找到问题原因 - 执行
kubectl logs --tail 100 <pod名> -n <命名空间>查看服务最后一百行日志或者用logs -p选项查看前一个 pod 的日志,分析是否是服务原因导致pod重启 - 若仍然没找到原因可以去分析下pod所在节点的系统服务日志例如
/var/log/messages
搜索和重启时间相近的日志发现内存不足导致pod被kill, 报错信息如下:Nov 11 17:30:43 host kernel: Memory cgroup out of memory: Kill process 31719 (grpc-default-ex) score 0 or sacrifice child Nov 11 17:30:43 host kernel: Killed process 24288 (java) total-vm:3747220kB, anon-rss:450448kB, file-rss:15868kB, shmem-rss:0kB Nov 11 17:30:43 host dockerd: time="2021-11-11T17:30:43.533974651+08:00" level=info msg="ignoring event" container=55ca2298ca9379b8bfcb4d977f9aeeb2eaa155f0126009bdab2747f8b1b5a77c module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete" Nov 11 17:30:43 host containerd: time="2021-11-11T17:30:43.535142442+08:00" level=info msg="shim disconnected" id=55ca2298ca9379b8bfcb4d977f9aeeb2eaa155f0126009bdab2747f8b1b5a77c Nov 11 17:30:43 host containerd: time="2021-11-11T17:30:43.535214178+08:00" level=error msg="copy shim log" error="read /proc/self/fd/75: file already closed" Nov 11 17:30:43 host dockerd: time="2021-11-11T17:30:43.619404307+08:00" level=info msg="ignoring event" container=84129b38c689b77781da0ac9f44811747d5cac1420565ee2848f96f08cc50634 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete" Nov 11 17:30:43 host containerd: time="2021-11-11T17:30:43.620511825+08:00" level=info msg="shim disconnected" id=84129b38c689b77781da0ac9f44811747d5cac1420565ee2848f96f08cc50634 Nov 11 17:30:43 host containerd: time="2021-11-11T17:30:43.620570486+08:00" level=error msg="copy shim log" error="read /proc/self/fd/79: file already closed"
获取更多进程被kill 的相关信息可以用下面的命令
dmesg | egrep -i -B100 'killed process'
# 或:
egrep -i 'killed process' /var/log/messages
egrep -i -r 'killed process' /var/log
## 或:
journalctl -xb | egrep -i 'killed process'
分析并释放系统内存
执行 free -h 查看系统内存发现buff/cache占用特别高,如下:
[root@host ~]# free -h
total used free shared buff/cache available
Mem: 15G 3.4G 618M 3.0M 11G 10G
Swap: 0B 0B 0B
[root@host ~]#
使用hcache查看buff/cache占用情况
执行下面的命令

当Docker pod因内存不足频繁重启时,通过分析日志和系统服务发现是journal日志服务占用大量缓存。使用`journalctl`命令清理过期日志释放了近4GB内存。此外,调整JVM参数,限制最大堆大小以避免容器内存限制冲突。监控和优化内存使用,确保服务稳定。
最低0.47元/天 解锁文章
987

被折叠的 条评论
为什么被折叠?



