
1. Linux进程查看基础为什么需要关注进程在Linux系统中进程是程序执行的实例是系统资源分配的基本单位。理解进程管理的重要性就像汽车仪表盘对于驾驶员的意义——它能告诉你系统正在发生什么、资源被谁占用、是否存在异常行为。我刚接触Linux时曾遇到服务器突然变慢的情况。通过top命令发现一个异常进程占用了98%的CPU这才知道系统被植入了挖矿程序。这个经历让我深刻认识到进程查看不仅是基础技能更是系统运维的第一道防线。2. 核心命令工具详解2.1 ps命令进程快照专家ps(process status)是最基础的进程查看工具它能提供系统当前进程的快照。我最常用的是组合参数ps aux --sort-%cpu | head -10这个命令会a显示所有用户的进程u以用户友好的格式显示x包括没有控制终端的进程--sort-%cpu按CPU使用率降序排列head -10只显示前10条记录经验在服务器排查性能问题时我习惯先用这个命令快速定位CPU消耗大户效果立竿见影。2.2 top/htop动态监控利器top提供实时动态的进程监控界面就像汽车仪表盘的实时转速表。我教团队成员时总会强调几个关键数据load average系统负载超过CPU核心数就要警惕%CPU进程CPU占用率RES实际内存占用S进程状态R运行S睡眠Z僵尸而htop是top的增强版支持鼠标操作树状视图颜色标记直接杀死进程安装方法# CentOS/RHEL sudo yum install htop # Ubuntu/Debian sudo apt install htop2.3 pstree进程家族图谱当遇到进程依赖关系复杂的情况pstree能以树状形式直观展示父子进程关系。这对排查僵尸进程特别有用pstree -p | grep -A 5 zombie参数说明-p显示PID-A使用ASCII字符绘制树状图-n按PID排序而非进程名3. 高级进程诊断技巧3.1 查看进程打开的文件lsof命令能列出进程打开的所有文件这在排查文件被占用问题时特别有用sudo lsof -p PID我常用组合命令查找被删除但仍被进程占用的文件释放磁盘空间时很有用sudo lsof | grep deleted3.2 进程资源限制检查/proc文件系统是了解进程的宝库。每个进程都有对应的目录如/proc/1234包含status进程状态摘要limits资源限制ioI/O统计smaps内存映射详情查看某个进程的环境变量cat /proc/PID/environ | tr \0 \n3.3 网络连接关联当怀疑某个进程有异常网络活动时组合使用netstat和pssudo netstat -tulnp | grep 端口号 sudo ps -p 对应PID -o pid,cmd,user4. 实战问题排查指南4.1 僵尸进程处理方案僵尸进程是已终止但未被父进程回收的进程。处理步骤识别僵尸进程ps aux | grep Z确认父进程pstree -p | grep -A 10 僵尸PID向父进程发送SIGCHLD信号kill -s SIGCHLD 父进程PID如无效考虑终止父进程谨慎操作4.2 内存泄漏定位方法我曾用以下方法成功定位过Java应用的内存泄漏找出内存消耗大的进程top -o %MEM查看详细内存映射pmap -x PID生成堆转储针对Javajmap -dump:formatb,fileheap.hprof PID4.3 隐藏进程检测技巧某些恶意程序会隐藏自己检测方法对比ps和/proc目录ls /proc | grep -v [a-zA-Z] | sort -n proc_pids.txt ps -eo pid | sort -n ps_pids.txt diff proc_pids.txt ps_pids.txt检查异常内核模块lsmod | grep -i stealth5. 性能监控与优化5.1 进程资源监控方案长期监控建议使用sarsysstat包vmstat 1实时内存监控iotop磁盘I/O监控我常用的性能检查清单watch -n 1 echo CPU:; mpstat -P ALL 1 1 | grep -v Average; echo Memory:; free -h; echo Disk:; iostat -dx 1 15.2 进程优先级调整使用nice和renice调整进程优先级nice -n 19 ./cpu_intensive_script.sh # 启动低优先级进程 renice -n 10 -p PID # 调整运行中进程优先级注意普通用户只能降低优先级root可以提升优先级6. 自动化管理实践6.1 进程监控脚本示例这是我用在生产环境的基础监控脚本#!/bin/bash THRESHOLD90 LOG_FILE/var/log/process_monitor.log check_process() { local process$1 if ! pgrep -x $process /dev/null; then echo $(date) - 进程 $process 未运行 $LOG_FILE systemctl restart $process fi } check_cpu() { local cpu_usage$(top -bn1 | grep Cpu(s) | awk {print 100 - $8}) if (( $(echo $cpu_usage $THRESHOLD | bc -l) )); then echo $(date) - CPU使用率超过阈值: ${cpu_usage}% $LOG_FILE ps -eo pid,user,%cpu,cmd --sort-%cpu | head -5 $LOG_FILE fi } check_process nginx check_process mysql check_cpu6.2 进程管理Alias推荐在.bashrc中添加这些别名能提高效率alias pstopps aux --sort-%cpu | head -10 alias psmemps aux --sort-%mem | head -10 alias psfindps aux | grep -v grep | grep -i alias pskillfunction _pskill(){ ps aux | grep -i $1 | awk {print $2} | xargs kill -9; };_pskill7. 容器环境特殊考量7.1 Docker容器进程查看在容器化环境中需要特殊方法查看宿主机上所有容器进程docker stats --no-stream进入容器查看进程docker exec -it 容器名 top排查容器内存泄漏docker run -it --rm --pidhost ubuntu bash -c apt update apt install -y procps top7.2 Kubernetes环境进程管理在K8s中常用的命令kubectl top pods --containers kubectl get pods -o wide kubectl exec -it pod名 -- /bin/bash8. 安全审计与加固8.1 可疑进程检查清单我的安全检查流程检查异常CPU使用ps -eo pid,user,pcpu,pmem,cmd --sort-pcpu | head -20检查异常网络连接lsof -i -P -n检查隐藏进程如前文方法检查异常定时任务crontab -l ls -la /etc/cron*8.2 进程权限最小化原则安全加固建议避免以root运行应用进程使用chroot或命名空间隔离设置适当的ulimit限制使用systemd的MemoryMax等限制参数[Service] MemoryMax1G CPUQuota50%