记一次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
处理有问题的服务代码
本文来自博客园,作者:有鹏自远方来,转载请注明原文链接:https://www.cnblogs.com/2019peng/p/16003384.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具