查找服务器上存在线程泄露的进程

以下是一个改进的命令,可以列出所有线程数大于200的进程及其PID和线程数:

bash 复制代码
find /proc -maxdepth 1 -type d -regex '/proc/[0-9]+' -exec sh -c '
  for pid_dir do
    pid=$(basename "$pid_dir")
    if [ -f "$pid_dir/status" ]; then
      threads=$(awk "/Threads/ {print \$2}" "$pid_dir/status" 2>/dev/null)
      if [ -n "$threads" ] && [ "$threads" -gt 200 ]; then
        echo "PID: $pid, Threads: $threads"
      fi
    fi
  done
' sh {} +

命令详解:

  1. 查找所有PID目录

    bash 复制代码
    find /proc -maxdepth 1 -type d -regex '/proc/[0-9]+'
    • -maxdepth 1:只搜索/proc顶层目录
    • -type d:只匹配目录
    • -regex:正则匹配纯数字PID目录
  2. 高效处理目录

    bash 复制代码
    -exec sh -c '...' sh {} +
    • 使用find -exec +批量处理目录,比逐个处理更高效
    • 避免for i in $(ls)可能导致的空格问题
  3. 提取线程数

    bash 复制代码
    threads=$(awk "/Threads/ {print \$2}" "$pid_dir/status" 2>/dev/null)
    • 使用awk精确提取Threads行的第二个字段
    • 2>/dev/null忽略权限错误或已终止进程
  4. 条件过滤

    bash 复制代码
    if [ -n "$threads" ] && [ "$threads" -gt 200 ]; then
    • -n "$threads":确保成功获取线程数
    • -gt 200:筛选线程数大于200的进程

输出示例:

复制代码
PID: 1234, Threads: 250
PID: 5678, Threads: 312
PID: 9012, Threads: 280

优化版本(单行命令):

bash 复制代码
find /proc -maxdepth 1 -name '[0-9]*' -type d -exec awk -F: '/^Pid|^Threads/ {pid=$2; getline; if($2>200) printf "PID: %d, Threads: %d\n", pid, $2}' {}/status \; 2>/dev/null

关键改进:

  1. 避免解析ls输出 :直接使用find匹配目录,更安全可靠
  2. 高效批量处理 :使用find -exec +减少子进程创建
  3. 错误处理:忽略无法访问的进程目录
  4. 精确匹配:确保只处理有效进程状态文件
  5. 完整输出:同时显示PID和线程数

注意:某些系统进程可能无法访问(权限问题),这些会被自动忽略。

写在最后:

springboot内嵌两种Web服务器,Undertow和Tomcat,业务正常情况下线程数都不会大于200太多,如果大太多,那么有可能程序存在线程泄露的问题,更进一步可能会导致业务不可用

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏2 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog2 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
琥珀色糖2 天前
SimlpeHttp
linux·服务器
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
第十人i2 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器
布裘2 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境