Linux

Linux 服务器巡检清单:从负载到端口

分类:Linux · 阅读约 10 分钟

半夜被叫起来看服务器,最忌讳东一榔头西一棒子。固定一条动线:负载 → 内存 → 磁盘 → 端口/连接 → 日志,十分钟就能把问题圈进一个小范围。

1. 负载:先看 uptime 的三个数

uptime
# load average: 2.31, 1.87, 1.20   ← 1 / 5 / 15 分钟平均负载
nproc                # 有几个核:负载持续高于核数才叫排队
top -o %CPU          # 谁在烧 CPU(按 P 也行)
top -o %MEM          # 谁在吃内存(按 M)

判断要点:负载高但 CPU 使用率低,多半是 I/O 等待(top 里看 wa 一列)或大量不可中断睡眠进程(状态 D),方向完全不同。

2. 内存:看 available,不要只看 free

free -h
# available 才是"真能用的",buff/cache 会在需要时让路
cat /proc/meminfo | grep -E 'MemAvailable|Swap'

3. 磁盘:两个 df/du 是黄金组合

df -h                 # 哪个分区满了
df -i                 # inode 用完时症状相同,别漏
du -sh /var/* 2>/dev/null | sort -rh | head   # 找大户
journalctl --disk-usage                       # 日志常是隐藏大户
du -sh /var/lib/docker 2>/dev/null            # 容器镜像与日志
经典陷阱:df 显示有空间但写不进去——文件被进程删了但句柄没释放。用 lsof +L1 找"已删除仍占用"的文件,重启对应进程才真正释放。

4. 端口与连接:ss 比 netstat 快得多

ss -lntup                       # 所有监听端口 + 进程
ss -tn state established | wc -l  # 当前连接数
ss -s                           # 连接汇总(含 TIME-WAIT 数量)
# 某个端口到底通不通,从外部测:
curl -v --connect-timeout 5 http://host:port/

5. 日志:journalctl 三连

journalctl -p err -n 50 --no-pager     # 只看错误级以上
journalctl -u <服务名> -n 100 --no-pager
journalctl --since "30 min ago" -p warning --no-pager
dmesg -T | tail -20                    # OOM、磁盘错误都在这里

一键巡检序列(可存成脚本)

echo "=== $(hostname) $(date) ==="
uptime; free -h; df -h / /var 2>/dev/null
ss -lnt | awk 'NR>1{print $4}' | sort -u | head -30
systemctl --failed --no-legend
journalctl -p err -n 10 --no-pager

巡检的意义不在命令本身,而在于基线:平时知道这台机器负载长什么样、监听哪些端口,出事时一眼就能看出"多了什么、少了什么"。