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

文章目录

进程排查方法论

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

原则

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

常用工具与功能

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

建议 :生产环境中应优先使用非侵入式工具(toppslsofjournalctl),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 查找已被删除但仍在写入的大文件,解决 dfdu 结果不一致的问题

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=sudojournalctl _COMM=sshd 分析特权操作和登录行为

实战案例

待二期更新

相关推荐
Leweslyh7 小时前
《3GPP TS 28.312 面向移动网络的意图驱动管理服务》完整自学教程
开发语言·网络·php
ICT系统集成阿祥7 小时前
SSH连接交换机慢的原因&优化方案
运维·服务器·ssh
Urbano7 小时前
成套工装服饰生产工艺难点攻克与自动化设备应用研究
运维·自动化
liuzhilongDBA7 小时前
浅析连接池和TCP探活
网络·网络协议·tcp/ip
烁3477 小时前
Linux简单脚本
linux·运维·服务器
ai_coder_ai7 小时前
论P2P计算关键技术与应用
网络·网络协议·p2p
難釋懷7 小时前
Nginx水平扩展
运维·nginx
森叶7 小时前
Electron 多进程下的“库引入“全解析:核心模块、Electron API、第三方依赖与 utilityProcess 的依赖处理
运维·javascript·electron
爱讲故事的7 小时前
计算机网络第 8 章复习:Network Security 网络安全
网络·计算机网络·web安全
sdm0704277 小时前
网络原理-4.数据链路层
网络