
1. Linux进程管理基础概念在Linux系统中进程是程序执行的实例也是系统资源分配的基本单位。理解进程管理首先要掌握几个核心概念进程IDPID是系统分配给每个进程的唯一标识符父进程IDPPID表示创建当前进程的父进程用户IDUID和组IDGID决定了进程的权限范围。注意Linux中的进程与Windows中的应用程序概念不同一个程序可以同时运行多个进程实例而系统服务通常也是以后台进程形式存在。进程状态是监控时需要重点关注的指标主要包括R (Running)正在运行或可运行状态S (Sleeping)可中断的睡眠状态D (Uninterruptible sleep)不可中断的睡眠状态Z (Zombie)僵尸进程T (Stopped)暂停状态2. 进程管理核心命令详解2.1 进程查看命令ps命令是最基础的进程查看工具常用组合ps aux # 查看所有用户的所有进程 ps -ef # 完整格式显示进程信息 ps -eLf # 显示线程信息top命令提供动态实时视图top -d 5 # 5秒刷新一次 top -p 1234,5678 # 监控指定PID进程htop是top的增强版支持鼠标操作和彩色显示htop -u username # 只显示指定用户进程2.2 进程控制命令kill命令用于终止进程kill -9 1234 # 强制终止PID为1234的进程 killall -HUP nginx # 向所有nginx进程发送HUP信号nice和renice调整进程优先级nice -n 10 ./script.sh # 启动时设置优先级 renice 15 -p 1234 # 修改运行中进程的优先级2.3 进程关系查看pstree以树状图显示进程关系pstree -p # 显示PID pstree -u # 显示用户信息3. 高级进程监控技术3.1 系统资源监控工具vmstat报告虚拟内存统计vmstat 5 # 每5秒刷新一次iostat监控CPU和磁盘I/Oiostat -dx 5 # 显示详细磁盘统计3.2 进程级资源监控pidstat提供进程级资源使用统计pidstat -urd -p 1234 2 5 # 监控PID为1234的进程每2秒采样共5次strace跟踪系统调用strace -p 1234 # 跟踪运行中进程 strace -c ./program # 统计程序执行的系统调用3.3 性能分析工具perf是Linux内核提供的性能分析工具perf stat -p 1234 # 统计进程性能事件 perf top # 实时显示热点函数4. 自动化监控方案实现4.1 使用sysstat工具集sysstat包含sar、iostat等工具可配置定时采集# 编辑/etc/sysconfig/sysstat SA1_OPTIONS-S DISK # 只收集磁盘统计4.2 自定义监控脚本示例CPU监控脚本#!/bin/bash THRESHOLD80 while true; do CPU_USAGE$(top -bn1 | grep Cpu(s) | sed s/.*, *\([0-9.]*\)%* id.*/\1/ | awk {print 100 - $1}) if (( $(echo $CPU_USAGE $THRESHOLD | bc -l) )); then echo $(date): CPU usage $CPU_USAGE% /var/log/high_cpu.log fi sleep 60 done4.3 使用PrometheusGrafana配置node_exporter采集进程指标# node_exporter配置 collectors: enabled: processGrafana仪表盘可直观展示进程CPU/内存使用率进程数量变化系统负载与进程关系5. 常见问题排查指南5.1 高CPU占用排查使用top找到高CPU进程使用strace跟踪系统调用使用perf分析热点函数检查是否死循环或异常递归5.2 内存泄漏诊断使用smem查看实际内存使用定期记录进程RSS变化使用valgrind检测内存问题检查是否有未释放的资源5.3 僵尸进程处理识别僵尸进程ps aux | grep Z找到其父进程并重启如无法重启父进程可考虑终止父进程6. 实战经验分享在实际生产环境中我发现这些技巧特别有用使用cgroups限制关键进程资源cgcreate -g cpu,memory:/mygroup echo 100000 /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us关键进程监控模板应包含进程存活状态资源使用率响应时间子进程数量长期运行进程建议搭配daemon工具如supervisord[program:myapp] command/path/to/app autostarttrue autorestarttrue容器环境下进程管理差异容器内PID通常从1开始需通过容器引擎管理进程资源限制通过cgroups实现