Linux 与系统

Linux 服务器日常巡检:状态、趋势与故障线索

服务器日常巡检的分层方法:先看状态、再看趋势,从监控数据与日志中寻找故障线索。

前言

服务器运维是每个后端开发者的必备技能。不管你用的是云服务器还是物理机,掌握基本的运维命令和排查思路,能让你在遇到问题时快速定位并解决。

本文整理了 Linux 服务器日常运维中最常用的检查命令和技巧,可按现象查找对应命令。


服务器整体状态速查

一条命令看服务器整体情况:

plaintext1 行
uptime

输出示例:

plaintext1 行
 10:38:01 up 1 day, 11:37,  0 users,  load average: 0.41, 0.11, 0.03
  • up 1 day:服务器运行时间
  • load average:1分钟、5分钟、15分钟的平均负载
  • 负载值一般不超过 CPU 核心数就算正常

CPU 检查

查看 CPU 信息

plaintext3 行
# CPU 型号和核心数
cat /proc/cpuinfo | grep "model name" | head -1
nproc

查看 CPU 使用率

plaintext8 行
# 实时监控
top

# 只看 CPU 占用前 10 的进程
top -bn1 | head -17

# 或者用 htop(更好看)
htop

查看负载

plaintext1 行
cat /proc/loadavg

负载解读:

  • load average < CPU 核心数:正常
  • load average = CPU 核心数:刚好满载
  • load average > CPU 核心数:过载,需要排查

内存检查

查看内存使用

plaintext1 行
free -h

输出示例:

plaintext3 行
              total        used        free      shared  buff/cache   available
Mem:          3.4Gi       1.8Gi       159Mi       2.0Mi       1.4Gi       1.3Gi
Swap:         4.0Gi        24Mi       4.0Gi

关键指标:

  • available:实际可用内存(比 free 更准确)
  • Swap 使用量:如果 Swap 使用很高,说明内存不够了

查看内存占用最多的进程

plaintext1 行
ps aux --sort=-%mem | head -10

磁盘检查

查看磁盘空间

plaintext1 行
df -h

注意: 使用率超过 80% 就要考虑清理了。

查看目录大小

plaintext5 行
# 查看当前目录下各文件夹大小
du -sh * | sort -rh | head -10

# 查看 /var/log 日志占用
du -sh /var/log/*

常见清理操作

plaintext5 行
# 清理系统日志
journalctl --vacuum-time=7d

# 清理 apt 缓存
apt clean

网络检查

查看网络连接

plaintext8 行
# 查看所有监听端口
ss -tlnp

# 查看所有连接
ss -tanp

# 统计连接数
ss -s

测试网络连通性

plaintext8 行
# ping 测试
ping -c 4 8.8.8.8

# DNS 解析测试
nslookup google.com

# 路由追踪
traceroute google.com

查看带宽使用

plaintext5 行
# 安装 iftop
apt install iftop

# 实时查看网卡流量
iftop -i eth0

进程管理

查看进程

plaintext11 行
# 查看所有进程
ps aux

# 按 CPU 排序
ps aux --sort=-%cpu | head -10

# 按内存排序
ps aux --sort=-%mem | head -10

# 查找特定进程
ps aux | grep nginx

杀死进程

plaintext8 行
# 优雅终止
kill PID

# 强制杀死
kill -9 PID

# 按名字杀
pkill nginx

日志排查

系统日志

plaintext8 行
# 查看系统日志
tail -f /var/log/syslog

# 查看内核日志
dmesg | tail -20

# 查看登录日志
last

应用日志

plaintext6 行
# Nginx 日志
tail -f /var/log/nginx/error.log

# systemd 服务日志
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"

安全检查

查看登录失败记录

plaintext2 行
# 查看失败登录
grep "Failed password" /var/log/auth.log | tail -20

查看当前登录用户

plaintext2 行
who
w

检查防火墙

plaintext5 行
# Ubuntu
ufw status verbose

# CentOS
firewall-cmd --list-all

常用运维脚本

批量服务器巡检脚本

plaintext23 行
#!/bin/bash
echo "========== 服务器巡检 =========="
echo "时间: $(date)"
echo ""
echo "--- 系统信息 ---"
uptime
echo ""
echo "--- CPU 负载 ---"
cat /proc/loadavg
echo ""
echo "--- 内存使用 ---"
free -h
echo ""
echo "--- 磁盘使用 ---"
df -h | grep -E "^/dev"
echo ""
echo "--- 网络连接数 ---"
ss -s
echo ""
echo "--- 最近登录 ---"
last -5
echo ""
echo "========== 巡检完成 =========="

保存为 check.sh,加执行权限后运行:

plaintext2 行
chmod +x check.sh
./check.sh

速查表

场景 命令
查看 CPU 负载 uptime
查看内存 free -h
查看磁盘 df -h
查看端口 ss -tlnp
查看进程 ps aux
实时监控 top / htop
查看日志 tail -f /var/log/syslog
测试网络 ping / curl
查看网卡 ip addr
防火墙 ufw status

总结

服务器运维的核心就是:监控、排查、清理、安全。

养成定期检查的习惯,很多问题在爆发前就能发现。建议把上面的巡检脚本加入 crontab,每天自动跑一次,有问题及时告警。

plaintext2 行
# 每天早上 9 点巡检一次
echo "0 9 * * * /path/to/check.sh >> /var/log/daily-check.log 2>&1" | crontab -

本文是「服务器运维笔记」系列第一篇,后续会持续更新更多实用运维技巧。

按变化判断巡检结果

巡检先保存基线:实例版本、重启次数、磁盘与 inode、证书期限、备份时间及请求成功率。累计错误数需要比较相邻窗口增量;磁盘使用率应结合增长速率判断可用时间。

发现进程存活但请求失败时,沿代理、应用、存储分层检查。完成处置后复跑相同探测,并记录仍未恢复的任务。巡检脚本退出码要汇总子检查失败,不能仅以脚本运行结束作为通过。

← 返回文章