kubernetes-排查哪个pod打开文件过多
最近通过监控发现某kubernetes宿主机负载逐步增高,同时通过ss -s 发现tcp closed以及打开文件句柄数总是一直涨,涨到一定程度后掉下来了。
所以首先得找到哪个进程打开了过多的句柄
#for i in `ls /proc/ |grep '[0-9]'`; do mycount=`ls /proc/$i/fd|wc -l`; echo "$i $mycount"|awk '{if($2 > 1000) {print $0}}'; done
1318448 1840
254869 112902
691297 3926
692056 3879
这样能找到具体哪个进程打开了过多的文件描述符
通过ps 查找具体哪个进程
#ps axu|grep 254869
查找进程对应哪个具体哪个POD UUID
# cat /proc/254869/cgroup | grep "pod" | cut -d/ -f5 | cut -d- -f3
54e0be8d136970f7e56060ff39717c6c0f0ce93bae93eeead691342ebb6d343f
通过pod uuid反向查找具体pod name
containerd环境下
# crictl ps -q | grep 54e0be8d136970f7e56060ff39717c6c0f0ce93bae93eeead691342ebb6d343f | xargs crictl inspect | jq -r '.status.labels."io.kubernetes.pod.name"'
docker环境下雷同
然后再排查具体POD的责任人,进而处理~