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

以下是一个改进的命令,可以列出所有线程数大于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太多,如果大太多,那么有可能程序存在线程泄露的问题,更进一步可能会导致业务不可用

相关推荐
草履虫君6 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
日取其半万世不竭6 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器
优化Henry6 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心6 小时前
Linux网络传输层协议
linux·运维·网络
V搜xhliang02467 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
遇见火星7 小时前
Nginx限流配置:防止接口被刷,服务器稳如泰山
运维·服务器·nginx
计算机安禾8 小时前
【Linux从入门到精通】第49篇:服务器故障排查终极指南——思路决定出路
linux·运维·服务器
古月-一个C++方向的小白8 小时前
Linux——初识文件
linux·运维·服务器
北山有鸟8 小时前
编译香橙派内核
linux·运维·服务器
W.A委员会8 小时前
Docker基本使用流程
运维·docker·容器