搞定 Linux 进程管理和监控系统负载,一篇就够
Linux进程管理与系统负载监控一、前言本次基于CentOS7实操学习Linux进程全套知识覆盖进程基础理论、进程查看、前后台任务调度、进程信号控制、特殊进程僵尸/孤儿、系统负载监控五大模块所有实操命令统一使用[liuyifeicentos7 ~]$普通用户、[rootcentos7 ~]#管理员标准格式结合课堂理论真机踩坑记录整理方便复习查阅。二、基础概念梳理1. 程序、进程、线程区分程序存储在磁盘上静态可执行文件无运行资源占用进程程序运行后的动态实例独占内存地址、CPU、文件句柄等资源拥有独立运行上下文线程进程内最小执行单元共享进程全部资源切换开销更低。2. 进程创建机制Linux通过fork()系统调用生成子进程日常执行sleep、自定义脚本、命令行程序时bash父进程都会fork出新子进程。3. 操作系统四大核心管理职能任务管理、内存管理、设备管理、文件系统管理进程管理属于重中之重。三、进程查看 ps 系列实操命令ps支持UNIX带-、BSD无横杠、GNU双--三种参数风格覆盖多维度进程筛选。1. 查看全系统简易进程列表[liuyifeicentos7 ~]$ps-e输出字段PID(进程ID)、TTY(所属终端)、TIME(累计CPU占用时长)、CMD(程序名)2. 完整进程信息可查看父进程PPID[liuyifeicentos7 ~]$ps-ef|head-n5新增UID(运行用户)、PPID(父进程)、C(CPU占比)、STIME(启动时间)字段用于追溯进程父子依赖。3. 运维高频命令展示资源占用[liuyifeicentos7 ~]$psaxu# 按CPU使用率从高到低排序快速定位高负载进程[liuyifeicentos7 ~]$psaxu--sort-%cpu包含%CPU、%MEM、进程状态STAT排查CPU/内存爆满场景必备。4. 只查看当前liuyifei用户进程[liuyifeicentos7 ~]$ps-uliuyifei u过滤root系统内核、后台服务仅展示本人桌面、SSH、自定义程序。5. 按终端筛选进程[liuyifeicentos7 ~]$tty[liuyifeicentos7 ~]$ps-tpts/0 u精准查看当前SSH终端下所有运行程序。6. 树形展示进程父子关系[liuyifeicentos7 ~]$psaxf树形分层打印直观看清sshd→bash→脚本/命令的派生链路。7. 自定义输出字段、按程序过滤# 指定PID、CPU、命令三列输出[liuyifeicentos7 ~]$ps-opid,%cpu,command2581# 根据程序名筛选进程[liuyifeicentos7 ~]$ps-Cpasswd-opid,ruser,euser,command8. pgrep 快速获取进程PID无需搭配grep过滤简洁检索进程编号[liuyifeicentos7 ~]$ pgrepsleep# 同时输出PID和程序名[liuyifeicentos7 ~]$ pgrep-lsleep四、Shell前后台作业控制jobs1. 前台与后台进程核心区别前台进程占用终端可接收键盘CtrlC、CtrlZ信号能读取输入后台进程无法读取终端输入默认断开SSH会话会收到SIGHUP信号直接销毁。2. 全套后台操作指令符号直接后台运行程序[liuyifeicentos7 ~]$ study Linux[liuyifeicentos7 ~]$sleep1231sleep1232查看当前shell全部后台任务[liuyifeicentos7 ~]$jobs任务标记%1 %2区分运行中/已停止/已终止三种状态。3. 前台程序暂停至后台[liuyifeicentos7 ~]$ study Python# 按下快捷键 CtrlZ[liuyifeicentos7 ~]$jobs恢复暂停的后台任务运行[liuyifeicentos7 ~]$bg%2后台程序切回前台交互[liuyifeicentos7 ~]$fg%1# 前台执行 CtrlC 彻底终止程序3. 特殊交互程序限制passwd等需要键盘输入的交互程序放入后台会自动暂停无法正常执行。[liuyifeicentos7 ~]$passwd[1] 已停止4. 断网不退出两种解决方案方案一nohup轻量简单忽略挂断SIGHUP信号输出自动存入nohup.out日志[liuyifeicentos7 ~]$nohupstudy English方案二screen长任务首选支持重连适合2小时以上编译、补丁、数据同步任务操作流程# root安装epel源与screen[rootcentos7 ~]# curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[rootcentos7 ~]# yum install -y screen# 创建会话执行任务[liuyifeicentos7 ~]$screen[liuyifeicentos7 ~]$sleep1234# 断开后重连查看会话[liuyifeicentos7 ~]$screen-ls[liuyifeicentos7 ~]$screen-r会话ID5. 全局测试脚本 studyroot写入系统目录[rootcentos7 ~]# cat EOF /usr/local/bin/study#!/bin/bashwhiletruedoecho$(date): Im studying [$]study.logsleep1doneEOF[rootcentos7 ~]# chmod x /usr/local/bin/study6. CPU压测脚本 mm用户目录无限循环md5sum模拟高占用进程用于实验测试[liuyifeicentos7 ~]$mkdirbin[liuyifeicentos7 ~]$catbin/mmEOF #!/bin/bash while true do md5sum /dev/zero sleep 1 EOF[liuyifeicentos7 ~]$chmodx bin/mm五、进程信号 kill / pkill 实操1. 信号基础信号是发送给进程的软中断实现暂停、恢复、强制销毁查看全部信号列表[liuyifeicentos7 ~]$kill-l核心常用信号信号编号信号名作用9SIGKILL强制杀死无法拦截卡死进程专用15SIGTERM默认信号优雅终止允许收尾19SIGSTOP暂停进程运行18SIGCONT恢复暂停进程1SIGHUP终端挂断信号2. kill 多种使用方式# 通过任务号终止后台作业[liuyifeicentos7 ~]$kill%1 %2# 优雅终止指定PID进程[liuyifeicentos7 ~]$kill1234# 强制销毁卡死/脱离父进程的高负载程序[liuyifeicentos7 ~]$kill-919231# 暂停、恢复进程[liuyifeicentos7 ~]$kill-19%1[liuyifeicentos7 ~]$kill-18%13. pkill 批量管理进程按程序名批量清理[liuyifeicentos7 ~]$pkillsleep清空指定终端所有进程[liuyifeicentos7 ~]$pkill-tpts/0root一键杀死指定用户全部进程直接断开SSH[rootcentos7 ~]# pkill -u liuyifei4. 批量筛选PID强制销毁yum、多组卡死进程可组合管道筛选PID销毁[rootcentos7 ~]# kill -9 $(ps axu | grep yum | grep -v grep | awk {print $2})# 简化写法[rootcentos7 ~]# pkill -9 yum实操踩坑md5sum杀不完问题mm脚本中bash父进程被kill后子md5sum脱离父进程PPID变为1systemd普通kill无法销毁必须使用kill -9强制杀死。六、特殊进程僵尸进程 孤儿进程1. 僵尸进程Z状态产生条件子进程先退出父进程未调用wait()回收退出状态码特征进程标记Z defunctPCB资源持续占用不释放危害大量僵尸耗尽系统PID号无法新建进程模拟编写C语言代码父进程长时间sleep不回收子进程编译运行观察Z状态。// zombies.c#includestdio.h#includestdlib.h#includeunistd.hintmain(){pid_tidfork();if(id0){perror(fork);return1;}elseif(id0){printf(父进程休眠60s\n);sleep(60);}else{printf(子进程即将变为僵尸\n);sleep(10);exit(EXIT_SUCCESS);}return0;}编译运行[rootcentos7 ~]# yum install -y gcc[rootcentos7 ~]# gcc zombies.c -o zombies[rootcentos7 ~]# ./zombies2. 孤儿进程产生条件父进程提前退出子进程失去父进程系统处理1号systemd进程自动收养孤儿进程完成资源回收无严重资源泄漏风险。七、用户登录信息查询命令# 查看当前登录用户名[liuyifeicentos7 ~]$whoami# 查看在线用户、登录IP[liuyifeicentos7 ~]$who# 在线用户系统负载当前执行程序[liuyifeicentos7 ~]$ w# 历史登录、服务器重启完整日志[liuyifeicentos7 ~]$ last八、系统负载监控全解1. 负载平均值概念load average显示1/5/15分钟系统活跃任务均值不仅包含运行CPU进程还包含等待IO的阻塞进程CPU核心数是负载是否超标判断基准负载≈核心数为最优。2. 基础负载查看# 查看CPU核心数量[liuyifeicentos7 ~]$ lscpu# 查看系统运行时长负载[liuyifeicentos7 ~]$uptime3. top 动态监控工具实时查看CPU、内存、进程资源占用常用快捷键1多核展开、P按CPU排序、M按内存排序、k杀进程、q退出。4. stress 压力测试工具模拟CPU、内存、磁盘高负载用于性能测试# 2个CPU核心压满[rootcentos7 ~]# stress -c 2# 占用1G内存[rootcentos7 ~]# stress -m 1 --vm-bytes 1G# 磁盘IO压力[rootcentos7 ~]# stress -d 1 --hdd-bytes 2G5. 资源监控配套工具free -m查看内存、交换分区使用sar -dp 1每秒监控磁盘IO使用率sar -n DEV 1实时监控网卡带宽流量。九、运维监控总结四大监控维度CPU、内存、磁盘IO、网络带宽实时排查top、ps、sar、free压力模拟使用stress长期业务建议部署Zabbix/Prometheus可视化监控配置负载、磁盘空间告警定期查看系统日志、磁盘健康状态提前规避硬件/资源故障进程运维要点后台长任务使用nohup/screen高占用进程用-9强制销毁定时清理僵尸进程。