一、先看资源:CPU / 内存 / 磁盘

# 负载与运行时间(load average 三个值持续走高说明有压力)
uptime

# 内存使用
free -h

# 磁盘使用(重点看 / 挂载点)
df -h

# 实时看 CPU/内存占用最高的进程
top
# 按 P 按 CPU 排序,按 M 按内存排序

# 定位某个目录的占用大头
du -xh --max-depth=2 / | sort -rh | head -20

判断经验:

  • df -h 使用率到 90%+,优先怀疑日志、binlog 把磁盘灌满。
  • load average 长期超过 CPU 核数,说明 CPU 忙不过来。

二、再看网络:端口 / 连通性

# 看哪些端口在监听、哪个进程在用(排查端口占用)
ss -tlnp

# 老一点的命令也可以
netstat -tlnp

# 测试对外连通
ping -c 4 baidu.com
curl -v https://example.com

# 看路由
ip route

常见问题: 服务明明在跑却访问不了 → 先 ss -tlnp 看端口是否在监听、监听的是不是 0.0.0.0;再确认防火墙/安全组是否放行。

三、再查服务和日志

# 服务状态(重点看 Active: active (running) 还是 failed)
systemctl status nginx

# 看最近的错误日志
journalctl -xe
journalctl -u nginx --since "10 min ago"

# 内核/硬件报错(磁盘、内存、驱动问题常在这里)
dmesg | tail -50

# 实时跟踪应用日志
tail -f /var/log/nginx/error.log

日志定位口诀: /var/log/syslog(系统)、/var/log/nginx/error.log(Web)、/var/log/mysql/error.log(数据库)。先看 tail -n 100 最近报错,再往上追。

四、附:一键系统体检脚本

#!/bin/bash
# 一键体检:CPU / 内存 / 磁盘 / 端口 / 内核日志
echo "===== 运行时间与负载 ====="
uptime
echo -e "\n===== 内存 ====="
free -h
echo -e "\n===== 磁盘 ====="
df -h | grep -vE "tmpfs|loop"
echo -e "\n===== 监听端口 ====="
ss -tlnp
echo -e "\n===== 最近内核日志 ====="
dmesg | tail -20
echo -e "\n===== 最近系统错误 ====="
journalctl -p err --since "1 hour ago" --no-pager | tail -20

保存为 sys_check.sh,chmod +x sys_check.sh,用 ./sys_check.sh 执行,或配合 crontab 定时记录。

五、常见故障排查速查

现象先查常见原因
网页打不开systemctl status nginx + ss -tlnp服务没起 / 端口没监听 / 防火墙拦
磁盘爆了df -h → du -xh / \| sort -rh \| head日志、binlog、备份文件堆积
机器卡死top + free -h内存不足触发 swap,或进程异常吃满 CPU
端口被占ss -tlnp多实例冲突 / 服务重复启动
莫名重启dmesg + journalctl -k内存颗粒错误 / 过热 / 内核 panic