服务器监控入门:CPU 内存告警怎么做

服务器监控入门:CPU 内存告警怎么做

今年有天早上,我习惯性地打开博客看一眼——转圈,打不开。SSH 上去 top 一看,内存被吃光了,系统在疯狂 swap。重启,恢复,前后十分钟。但那十分钟里我一直在想:它挂了多久?我完全不知道。这感觉就像家里烟雾报警器没装电池,着没着火全靠鼻子。 那天之后,我给这台 2核2G 的小机器装上了"烟雾报警器"。下面是从 free、top 看起,到写一个超限告警脚本的完整入门记录。 先学会看:free、top、df 三件套 监控的第一步不是装软件,是学会看机器的脸色。这三个命令够用很久: free -h 看内存。重点看 available 那一列,那是真正还能用的。我的经验:长期低于 200M 就要警惕了,2核2G 的机器,available 掉到 100M 以内,离出事不远。 top 看 CPU 和进程。按 M 按内存排序,按 P 按 CPU 排序,一眼找出吃资源的大户。那天早上吃光我内存的,就是一个失控的进程,top 里排第一,RES 列数字大得刺眼。top 是动态的,按 q 退出,别在里面迷路。 df -h 看硬盘。日志、备份最容易把硬盘吃满,/ 分区用到 85% 以上就该清理了。硬盘满了比内存满了更麻烦——内存满了重启能好,硬盘满了连日志都写不进去。 硬盘满了比内存满了更麻烦,日志和备份最容易把硬盘吃满,我的备份方案是每天凌晨打包、只留 7 天,脚本记在另一篇。 这三个命令,我现在每周看一次,跟检查汽车胎压一个频率。不用天天看,但要养成习惯。 告警脚本:让机器学会"喊疼" 人不可能天天盯着 top,所以第二步是写个脚本:资源超限就喊一嗓子。脚本放在 /root/monitor.sh: #!/bin/bash # 内存使用超过 85% 就告警 MEM_USED=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}') # 根分区使用超过 85% 就告警 DISK_USED=$(df / | awk 'NR==2 {print $5}' | tr -d '%') # 1 分钟平均负载超过 CPU 核数就告警(2核机器,超过 2 就算高) LOAD=$(awk '{print $1}' /proc/loadavg) ALERT="" if [ "$MEM_USED" -gt 85 ]; then ALERT="${ALERT}内存使用 ${MEM_USED}%,超过 85%。\n" fi if [ "$DISK_USED" -gt 85 ]; then ALERT="${ALERT}硬盘使用 ${DISK_USED}%,超过 85%。\n" fi if awk "BEGIN {exit !($LOAD > 2)}"; then ALERT="${ALERT}1 分钟负载 ${LOAD},超过 2(2核机器)。\n" fi if [ -n "$ALERT" ]; then echo -e "VPS 告警:\n$ALERT" | mail -s "VPS 资源告警" myemail@example.com fi 解释一下阈值。内存和硬盘设 85%,是留 15% 的缓冲——告警是让你提前处理,不是等火烧眉毛。负载阈值设成 CPU 核数(我这台 2核,就是 2),这是 Unix 世界的老规矩:负载长期超过核数,说明 CPU 真忙不过来了。短期冲高不用慌,看的是持续。 ...

November 1, 2026 · 2 min · 293 words