
在Linux中,可通过top/htop实时查看服务CPU、内存占用,结合watch定时刷新或cron/systemd timer周期执行脚本检查阈值,超过时通过邮件/消息队列触发告警,核心是工具监控+阈值判断+告警触发。
老师口吻:Linux系统通过/proc文件系统存储进程资源信息,监控工具读取该文件系统获取CPU、内存占用数据。
top/htop:实时交互式工具,top按CPU/内存排序进程,htop更直观(支持进程树);watch:循环执行命令并定时刷新输出(如每2秒刷新一次);cron:按时间表(分、时、日、月、年)执行任务,适合长期周期性检查;systemd timer:更灵活的定时任务,支持复杂周期(如按工作日、特定时间),依赖关系管理更强大。类比:top像汽车仪表盘,实时显示转速(CPU)和油量(内存);watch像定时刷新的仪表盘;cron是按时间表(如每天凌晨)检查油量;systemd timer是更智能的定时器,可设置复杂周期。
| 工具 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
top | 实时进程资源监控工具 | 交互式,按CPU/内存排序 | 短期实时监控(如快速查看异常) | 需手动刷新,不适合长期告警 |
htop | 图形化进程监控工具 | 直观(进程树、颜色标记) | 需X11环境,实时监控 | 需图形界面,复杂系统可能卡顿 |
watch | 命令循环执行工具 | 定时刷新命令输出(间隔固定) | 定期检查系统状态(如内存、磁盘) | 间隔时间固定,需手动设置 |
cron | 定时任务调度器 | 按时间表(分、时、日、月、年)执行 | 长期周期性任务(如每日备份) | 需编写crontab文件,权限管理 |
systemd timer | systemd的定时任务 | 支持复杂周期(如按工作日、特定时间) | 灵活周期性任务(如每5分钟检查服务) | 需编写timer单元文件,依赖管理 |
假设船舶动力系统监控服务进程ID为1234,监控CPU/内存并设置告警(以邮件告警为例):
实时查看进程资源:
top -H -p 1234 # -H显示线程,-p指定进程ID
定时检查内存(每60秒刷新):
watch -n 60 free -m # 查看内存使用情况
告警脚本(monitor.sh):
#!/bin/bash
PID=1234
THRESHOLD_CPU=80 # CPU阈值(%)
THRESHOLD_MEM=80 # 内存阈值(%)
while true; do
CPU=$(top -bn1 | grep "$PID" | awk '{print $9}')
MEM=$(ps -p $PID -o %mem|grep -v %mem|head -n1)
if (( $(echo "$CPU > $THRESHOLD_CPU" | bc -l) )) || (( $(echo "$MEM > $THRESHOLD_MEM" | bc -l) )); then
echo "告警:服务PID=$PID CPU=$CPU% 内存=$MEM%" | mail -s "船舶动力系统监控告警" admin@example.com
fi
sleep 60 # 每分钟检查一次
done
配置定时任务(cron或systemd timer):
* * * * * /path/to/monitor.sh # 每分钟执行脚本
monitor.timer:
[Unit]
Description=Monitor service CPU and Memory
[Timer]
OnCalendar=*:0/5 # 每5分钟执行一次
Persistent=true
[Install]
WantedBy=timers.target
monitor.service:
[Unit]
Description=Service monitor script
Wants=monitor.timer
[Service]
Type=oneshot
ExecStart=/path/to/monitor.sh
RemainAfterExit=yes
systemctl enable --now monitor.timer
在Linux中,监控关键服务CPU和内存并设置告警,核心是用top/htop实时查看,结合watch定时刷新,或通过cron/systemd timer周期执行脚本。比如用top -H -p <服务PID>实时看CPU、内存,用watch -n 2 free -m定期检查内存。告警方面,写一个shell脚本,比如检查服务进程的CPU是否超过80%,内存是否超过80%,超过时发送邮件。脚本内容是循环执行,每分钟检查一次,如果超过阈值就调用mail发送告警。配置上,可以用cron设置每分钟执行脚本,或者用systemd timer更灵活,比如每5分钟执行一次,通过systemctl启用。这样就能实时监控并触发告警。
htop代替top,更直观;或用ps aux | grep 服务名 | awk '{print $3,$4}'快速查看CPU、内存,减少命令执行时间。top查看时,进程ID可能被替换,导致监控错误。解决:通过进程名称或命令行参数(如“-p <进程名>”)准确识别。chmod +x,sudo执行)。