运维专题3——业务进程排查方法论

文章目录

进程排查方法论

生产环境的进程问题往往不是孤立的,排查时应遵循 "由表及里、由粗到细、分层定位"

原则

  • 全局概览:先查看系统整体资源使用情况(CPU、内存、负载、IO),确定问题范围
  • 进程定位:找到占用异常资源或行为异常的进程 PID
  • 深入分析:分析进程的运行状态、资源占用细节、系统调用、文件 / 网络依赖
  • 根因确认:结合日志和历史数据,验证问题根源
  • 验证修复:实施修复措施并验证效果

常用工具与功能

工具 功能 用法举例
top / htop 实时资源监控,发现异常进程 按 CPU/内存排序,观察负载趋势
ps 进程快照,获取进程树、线程、启动参数 查看父子关系、线程列表、环境变量
lsof 查看进程打开的文件、网络连接、管道 定位端口占用、删除文件未释放、Unix socket
strace 追踪系统调用和信号 分析进程卡死、性能瓶颈、权限错误
journalctl 集中式日志管理(systemd) 按服务、时间、优先级过滤日志

建议 :生产环境中应优先使用非侵入式工具(top、ps、lsof、journalctl),strace 会引入可观的性能开销,仅在明确需要时对目标进程短暂使用,且建议加上 -o 输出到文件以避免影响终端。

top 命令:实时性能监控

top 是最常用的实时进程监控工具,特别适合在高负载环境下快速识别异常进程。

bash 复制代码
# 按CPU使用率排序,显示完整命令行
top -c -o %CPU

# 按内存使用率排序,监控特定用户进程
top -u www-data -o %MEM


# 批量模式输出1次结果(适合脚本调用和日志记录)
top -b -n 1 > top_$(date +%Y%m%d_%H%M%S).log

# 指定刷新间隔为1秒,只显示指定PID的进程
top -d 1 -p 1234,5678

# 显示所有线程(H模式)
top -H
top -H -p 1234  # 只显示PID 1234的所有线程

剖析:

  • 在 k8s 节点上,当 CPU 使用率突增时,使用 top -H -p <pid> 查看线程级别的 CPU 消耗
  • 结合 -d 参数设置刷新间隔,在性能压测时持续监控进程资源变化
  • 使用 -1 选项查看每个 CPU 核心的负载分布,识别 CPU 绑定问题
  • -P:按 CPU 使用率降序排序

ps 命令:定位进程

命令示例:

bash 复制代码
# 查找占用内存超过1GB的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | awk '$4 > 1.0'

# 查找僵尸进程
ps -eo pid,stat,cmd | grep -w 'Z'

# 按启动时间排序,识别长时间运行的可疑进程
ps -eo pid,lstart,cmd --sort=start_time

# 结合grep和awk,监控特定服务的进程树
ps -ef --forest | grep -A 10 "nginx"

# 显示所有进程的详细资源使用情况
ps aux
ps aux --sort=-%cpu  # 按CPU使用率降序排序
ps aux --sort=-%mem  # 按内存使用率降序排序

# 显示指定进程的详细信息
ps -p 1234 -o pid,ppid,user,%cpu,%mem,vsz,rss,tty,stat,start,time,cmd

# 显示进程的所有线程
ps -p 1234 -L  # 显示PID 1234的所有线程
ps -eLf        # 显示系统所有进程的所有线程

# 查找所有僵尸进程及其父进程
ps aux | grep 'Z'

# 查找指定用户的所有进程
ps -u nginx

# 查找占用内存最多的前10个进程
ps aux --sort=-%mem | head -10

剖析:

  • 在自动化运维脚本中,使用 ps -p $PID -o comm= 验证进程是否存在
  • 结合 --ppid 参数分析进程父子关系,识别异常进程树
  • 使用 -L 选项查看线程信息,配合 top -H 进行线程级问题定位

lsof:文件与网络连接排查

lsof 是排查端口占用、文件句柄泄漏、网络连接异常的必备工具。

bash 复制代码
# 查看指定进程打开的所有文件
lsof -p 1234

# 查看指定端口被哪个进程占用(最常用!)
lsof -i :8080
lsof -i tcp:8080  # 只查看TCP连接
lsof -i udp:53    # 只查看UDP连接

# 查看指定用户打开的所有文件
lsof -u nginx

# 查看指定文件被哪个进程打开
lsof /var/log/nginx/access.log

# 查看所有网络连接
lsof -i
lsof -i -P -n  # 不解析端口号和主机名(速度更快)

# 查看被删除但仍被进程占用的文件(排查磁盘空间释放不了的问题)
lsof | grep deleted

# 分析网络连接状态
lsof -i TCP -s TCP:ESTABLISHED

# 统计进程打开的文件句柄数(排查文件句柄泄漏)
lsof -p 1234 | wc -l

剖析:

  • 端口冲突排查 :当服务启动失败时,使用 lsof -i :<port> 快速定位占用端口的进程
  • 磁盘空间异常 :使用 lsof | grep deleted 查找已被删除但仍在写入的大文件,解决 df 和 du 结果不一致的问题

strace:系统调用跟踪

当进程无响应、启动失败或行为异常时,strace 是深入分析进程的解决工具。

bash 复制代码
# 跟踪指定进程的所有系统调用
strace -p 1234

# 启动并跟踪新进程
strace ./myapp

# 将跟踪结果输出到文件(推荐!避免终端刷屏)
strace -o strace.log -p 1234

# 只跟踪指定类型的系统调用
strace -e trace=file -p 1234    # 只跟踪文件操作相关的系统调用
strace -e trace=network -p 1234 # 只跟踪网络相关的系统调用
strace -e trace=open,read,write -p 1234  # 只跟踪指定的系统调用

剖析

  • strace 会显著降低被跟踪进程的性能,生产环境中应尽量缩短跟踪时间,避免在业务高峰期使用
  • 对于高并发进程,使用-e参数过滤只关注的系统调用,减少输出量
  • 优先使用-o参数将结果输出到文件,便于后续分析

journalctl:systemd 日志查看

systemd systemd 的日志管理工具,提供结构化日志查询和系统事件追踪能力;是排查服务启动失败、进程异常退出的首选工具。

bash 复制代码
# 按时间范围查询日志
journalctl --since "2024-01-01 08:00:00" --until "2024-01-01 09:00:00"
journalctl --since "1 hour ago" 
journalctl --since "yesterday"

# 过滤特定服务的日志
journalctl -u nginx.service -f

# 按优先级过滤
journalctl -p warning

# 结合进程ID查询
journalctl _PID=<PID>

# 实时监控系统事件
journalctl -f -o json | jq 'select(.MESSAGE | contains("OOM"))'

# 查看系统启动日志 
journalctl -b # 本次启动的日志 
journalctl -b -1 # 上一次启动的日志

扩展

  • OOM 事件分析 :使用 journalctl -g "Out of memory" 查找内存不足事件,结合进程信息定位问题应用
  • 服务启动失败诊断 :journalctl -u service_name.service --since "1 hour ago" 查看服务启动失败的详细原因
  • 系统安全审计 :监控 journalctl _COMM=sudo 或 journalctl _COMM=sshd 分析特权操作和登录行为

实战案例

待二期更新

相关推荐
缓慢更新7 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮7 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮8 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Decay__8 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
久曲健的测试窝8 小时前
2026软件测试工具选型指南:双模式如何化解UI脚本维护难题
运维·人工智能·科技·aigc
Escalating_xu8 小时前
【Linux 网络编程】DNS 与 ICMP:从域名解析到 ping、traceroute,把“网络通不通”问清楚
linux·网络·php
NailiConveyor10 小时前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
Lsetea10 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot
如若12310 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
开开心心就好10 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节