核心是“定时检测 + 阈值判断 + 快照采集”,用mpstat和free精准获取cpu与内存使用率,设85~90% cpu、75~85%内存阈值并连续2次超限才触发,快照含top进程、线程、io详情,保存至时间戳目录,配合文件锁与日志实现健壮守护。

监控CPU和内存利用率并在超限时自动抓取进程快照,核心是“定时检测 + 阈值判断 + 快照采集”。不需要复杂框架,用top、ps、pidstat和date就能完成,关键是触发时机准、快照信息全、日志可追溯。
实时获取准确的CPU与内存使用率
Linux下top -bn1或vmstat 1 1输出易受干扰,推荐用更稳定的组合:
- CPU总使用率:用
mpstat 1 1 | awk '$3 ~ /%idle/ {printf "%.1f", 100-$11}'(需sysstat包),比top解析更可靠 - 内存使用率:用
free -m | awk 'NR==2{printf "%.1f", $3/$2*100}',避开cached/buffer干扰,聚焦实际已用比例 - 注意:避免在脚本中频繁调用
top -b -n1并grep,它默认含延迟且字段位置可能随版本变化
设定合理阈值并避免误触发
阈值不是越低越好。例如CPU持续>90%才需干预,但瞬时毛刺(如磁盘IO抖动)应过滤:
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
- 连续2次检测超限才触发(加计数器或写临时标记文件)
- CPU阈值建议设为85~90%,内存建议75~85%,留出缓冲余量
- 加时间窗口限制:同一小时内最多触发3次快照,防风暴式日志刷屏
抓取高价值进程快照,不止是ps aux
单靠ps aux不够——看不出线程、IO、内存分布。一次快照应包含:
- 按CPU排序的前10进程:
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head -n11 - 按内存排序的前10进程:
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%mem | head -n11 - 各进程线程详情:
ps -T -p $(pgrep -f "java|nginx" | head -1) 2>/dev/null | head -20(示例,可动态取高耗进程PID) - IO热点进程:
iotop -b -n1 -o -P 2>/dev/null | head -15(需root权限) - 保存为带时间戳的独立目录,如
/var/log/process-snap/20240520-142305/
集成到守护循环,支持后台长期运行
用while true; do ...; sleep 30; done即可,但要增强健壮性:
- 开头加
set -e和trap 'rm -f /tmp/cpu_alert.lock' EXIT防残留锁 - 用文件锁避免并发执行:
if mkdir /tmp/cpu_alert.lock 2>/dev/null; then ...; rmdir /tmp/cpu_alert.lock; fi - 日志统一输出到
/var/log/resource-alert.log,记录触发时间、指标值、快照路径 - 可选:超限后发邮件或调用curl通知企业微信/钉钉(加
curl -X POST语句)
不复杂但容易忽略细节。重点不在命令多炫,而在每次触发都能拿到足够定位问题的上下文信息。










