1. Linux进程监控的核心价值在Linux系统管理中进程监控就像汽车仪表盘对于驾驶员的意义。当我在生产环境第一次遇到服务异常时通过实时查看进程状态快速定位到某个Java进程内存泄漏的场景让我深刻体会到这项技能的重要性。现代Linux系统通常运行着数百个并发进程从系统守护进程到用户应用每个进程都在争夺CPU、内存和I/O资源。实时进程监控能帮我们立即发现异常进程如CPU占用100%的失控进程快速定位内存泄漏观察RES内存字段的持续增长识别僵尸进程defunct状态监控父子进程关系特别是守护进程派生的子进程分析线程级资源占用如Java应用的线程堆栈2. 基础工具三剑客ps/top/htop详解2.1 ps命令的实战技巧ps是进程快照工具就像给系统拍X光片。我最常用的组合是ps aux --sort-%mem | head -10 # 内存占用TOP10 ps -ef --forest | grep -v grep # 树形显示进程关系关键字段解析USER进程所有者突然出现的未知用户可能是入侵迹象%CPU超过100%表示使用了多核如400%即占满4核VSZ虚拟内存大小包含共享库RSS实际物理内存用量排查内存泄漏看这个STAT进程状态S休眠R运行Z僵尸经验在容器环境中ps auxf显示的进程树能清晰展示容器内应用与宿主机进程的关系2.2 top命令的动态观察top就像系统的心电图我的常用配置流程启动后按z开启高亮按b切换粗体显示按1展开所有CPU核心按W保存配置到~/.toprc关键交互命令M按内存排序排查OOM时必备P按CPU排序找计算密集型进程c显示完整命令识别伪装进程k终止进程需输入PIDH显示线程分析Java应用必备输出字段深度解读load average三个值分别代表1/5/15分钟平均负载超过CPU核数即过载%Cpu(s)us用户态、sy内核态、ni优先级、id空闲sy过高可能内核有问题KiB Membuffers是块设备缓存cached是文件缓存可用内存freebufferscached2.3 htop的进阶用法htop是top的增强版安装命令# Ubuntu/Debian sudo apt install htop # CentOS/RHEL sudo yum install epel-release sudo yum install htop特色功能演示鼠标点击表头排序支持所有指标树形视图F5切换进程标记空格键标记后批量操作搜索过滤F3输入关键词自定义视图F2设置显示列避坑提示在通过SSH连接时可能遇到终端兼容性问题导致显示异常此时需要设置export TERMxterm-256color3. 生产环境实战案例解析3.1 Java进程内存泄漏排查某次线上报警显示Java服务内存占用超过90%操作流程top -p $(pgrep -d, java)锁定目标进程观察RES内存持续增长且不被GC回收jstat -gcutil [PID] 1000查看GC情况发现老年代O占用率达99%最终用jmap -dump:formatb,fileheap.hprof [PID]导出堆分析3.2 僵尸进程清理方案当ps显示defunct状态进程时# 查找僵尸进程 ps -A -ostat,ppid | grep -e [zZ] # 获取父进程ID后向父进程发SIGCHLD kill -s SIGCHLD [PPID] # 顽固僵尸需要杀死父进程 kill -9 [PPID]3.3 隐藏进程检测技巧入侵者常用rootkit隐藏进程检测方法对比ps与/proc目录内容ls /proc | grep -v [a-z] | sort -n proc_list ps -ef | awk {print $2} | sort -n ps_list diff proc_list ps_list使用unhide工具sudo apt install unhide sudo unhide proc4. 高级监控方案4.1 系统性能快照# 每5秒采集一次共采集6次 vmstat 5 6 system.log # 监控磁盘IO iostat -dx 2 5 # 网络连接统计 ss -s4.2 进程级监控脚本实时记录某进程资源占用#!/bin/bash PID$(pgrep -f your_process_name) while true; do ps -p $PID -o %cpu,%mem,stat process_monitor.log sleep 5 done4.3 可视化方案使用glances工具pip install glances glances与Prometheus集成# 安装node_exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz # 配置textfile收集器 echo custom_process_cpu{pid1234} 42.3 /var/lib/node_exporter/textfile_collector/process_metrics.prom5. 终端异常问题解决遇到无法启动 conpty错误时常见于Windows Terminal连接Linux更新Windows Terminal到最新版修改默认配置文件→高级→将使用旧版控制台设为是或者改用更稳定的SSH客户端如MobaXterm对于Java进程ps查不到的情况# 检查/proc目录 ls -l /proc/[PID]/exe # 使用jps替代 ${JAVA_HOME}/bin/jps -l