记一次K8S项目把工作节点线程占满,导致服务崩盘事故处理

一开始发现线上服务不能正常使用

我是先排查K8S pod是否有异常

kubectl get pod -o wide

表面看着无异常

然后查看各项目运行日志,发现有些项目在报错:Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread

无法创建新的进程

然后发现这个项目所在的工作节点已经不能登录了,因为线程被消耗完了

处理办法 先驱逐这台节点上的pod,使服务能正常提供,重启该服务器,重启完后 查看该节点是否恢复到集群中,然后:kubectl uncordon (node) 把该节点变成可调度

现在开始排查是哪个服务在疯狂消耗进程

我这边编写了一个小脚本来输出各项目使用的进程

pid.sh

#!/bin/bash
ID=`ps aux |grep app.jar|grep -v grep |awk '{print $2}'`
echo $ID
for i in $ID
do
cat /proc/$i/status |grep Threads
done

 

处理有问题的服务代码

posted @ 2022-03-14 11:26  有鹏自远方来  阅读(314)  评论(0)    收藏  举报