为什么会通过PID来找对应的容器?
有一天收到一条主机线程数达到30760
的告警,然后通过监控排查到是JAVA的进程。但在Kubernetes集群下一台主机会运行很多JAVA进程,Kubernetes 使用容器运行时和 CRI(Container Runtime Interface)来管理容器,它们负责容器的创建、销毁和管理,使得容器的 PID 与宿主机的 PID 之间的映射变得复杂,那么如何找到哪个容器服务占用线程数较高呢?
扩大主机PID的方法: juejin.cn/post/719502…
Containerd客户端:juejin.cn/post/724964…
有效的方法
- 找PID占用线程数
pids=$(ps -ef|grep java |awk '{print $2}' |xargs)
for pid in $pids
do
echo $pid
cat /proc/$pid/status | grep Threads
done
- 通过CGroup找到容器ID
cat /proc/21277/cgroup
- 查看容器信息
nerdctl -n k8s.io inspect 8e18da8ba12d90a782b3acbd09dd31609c08617e6eb3a226f6ed77bd46075c8d
找到容器的镜像信息,也就找到是哪个服务了。