Linux服务器运维:5项核心巡检命令快速定位系统健康状态
2026/8/22 11:47:22 网站建设 项目流程

这次我们来看一个非常实际的 Linux 运维问题:服务器日常巡检。很多新手面对一台服务器,感觉千头万绪,不知从何下手。这篇文章不搞长篇大论,直接聚焦老师傅们上机后固定会先检查的 5 个核心项。无论你是管理单台服务器,还是维护一个小型集群,这套方法都能帮你快速建立巡检的“肌肉记忆”,在几分钟内对服务器健康状况有个基本判断。

这 5 项检查,覆盖了系统负载、资源瓶颈、服务状态、安全登录和存储空间,是排查绝大多数线上问题的起点。它们不依赖复杂的监控工具,仅用最基础的 Linux 命令即可完成,非常适合在 SSH 登录后第一时间执行。本文将逐一拆解每项检查的命令、关键指标解读以及异常排查思路,让你看完就能用。

1. 核心能力速览:五分钟快速巡检清单

在深入细节之前,我们先通过一个表格快速了解这 5 项核心巡检内容及其价值。这相当于一份“上机检查单”,帮你建立系统性思维。

检查项核心命令/工具关注关键指标主要目的
1. 系统负载与进程top/htop/uptime负载平均值(1,5,15分钟)、CPU使用率、僵尸进程判断系统当前繁忙程度,识别异常高负载进程。
2. 内存与交换空间free -h总内存、已用内存、可用内存、交换空间使用率发现内存泄漏或内存不足导致的性能瓶颈。
3. 磁盘空间与I/Odf -h/du -sh/iostat磁盘使用率、Inode使用率、I/O等待时间(%iowait)预防因磁盘写满导致的服务崩溃,发现磁盘I/O瓶颈。
4. 关键服务状态systemctl status <服务名>服务Active状态、日志中的错误信息确保Web、数据库、中间件等核心服务正常运行。
5. 安全与登录日志last/who/grep查看日志异常登录IP、失败登录尝试、非授权用户排查潜在的安全入侵和暴力破解行为。

这套方法的特点是直接、快速、可重复。它不追求大而全的监控报表,而是强调在紧急情况或日常登录时,用最短时间抓住主要矛盾。

2. 适用场景与使用边界

这套巡检方法主要适用于以下场景:

  • 日常健康检查:每天或每周登录服务器进行的例行检查。
  • 故障初步定位:当收到报警或用户反馈服务缓慢、不可用时,快速缩小问题范围。
  • 新服务器上线验收:验证新部署的服务器基础运行状态是否良好。
  • 缺乏完善监控系统时:在监控平台尚未覆盖或临时失效时,作为手动补充手段。

使用边界与注意事项

  • 非实时监控替代品:这是“点检”,无法替代Zabbix、Prometheus等实时监控系统的“线”和“面”的监控。
  • 需要人工执行:本文介绍的是手动命令,适用于服务器数量不多或临时检查。对于成百上千台的运维,必须实现自动化巡检脚本或平台。
  • 命令结果需结合上下文解读:例如,高CPU使用率在业务高峰期可能是正常的,在凌晨则可能是异常的。需要结合业务周期判断。
  • 安全合规:检查登录日志时,需遵守公司安全审计规定,不得用于非授权访问。

3. 环境准备与前置条件

进行巡检前,你需要确保具备以下条件:

  1. 操作系统:绝大多数Linux发行版(如CentOS/RHEL 7+, Ubuntu 18.04+, Debian等)均可。命令可能存在细微差异,本文以通用格式为主。
  2. 访问权限:拥有目标服务器的SSH登录权限,并且是root用户或具有sudo权限的普通用户。部分命令(如查看所有进程、某些日志文件)需要较高权限。
  3. 终端工具:任意SSH客户端(如PuTTY, SecureCRT, Xshell)或本地终端。
  4. 基础命令:系统默认应已安装top,free,df,du,iostat(可能需安装sysstat包),systemctl,last,who,grep等核心工具。

对于iostat等可能未预装的工具,可使用包管理器安装:

# 对于 CentOS/RHEL/Fedora sudo yum install sysstat -y # 或 sudo dnf install sysstat -y # 对于 Ubuntu/Debian sudo apt-get update sudo apt-get install sysstat -y

4. 第一项检查:系统负载与进程 (top/uptime)

登录服务器后,第一个命令通常是看整体负载。

操作与解读:

  1. 查看负载平均值

    uptime

    输出示例:12:05:03 up 30 days, 20:15, 2 users, load average: 0.08, 0.03, 0.01

    • load average: 0.08, 0.03, 0.01是关键,分别代表过去1分钟、5分钟、15分钟的系统平均负载。
    • 如何解读:对于单核CPU,负载1.00表示刚好满负荷。通常,如果15分钟负载持续高于CPU核心数,就需要警惕。例如,4核CPU,负载长期高于4,说明系统过载。
  2. 动态查看资源与进程

    top

    进入交互式界面。重点关注以下几行:

    • 第一行:同uptime,看负载。
    • 第二、三行:%Cpu(s):看CPU使用率。特别关注%us(用户空间)、%sy(系统内核)、%id(空闲)和%wa(I/O等待)。如果%wa很高,说明磁盘I/O可能是瓶颈。
    • 第四、五行:KiB Mem/KiB Swap:看物理内存和交换分区使用情况(下一节细讲)。
    • 进程列表:默认按CPU使用率排序。可以按M键改为按内存排序,按P键切回CPU排序。寻找长期占用资源异常高的进程。
  3. 更友好的进程查看器

    htop

    如果系统安装了htopyum/apt install htop),它比top更直观,支持颜色、鼠标操作和树状视图,强烈推荐使用。

异常排查思路

  • 负载高但CPU使用率不高:很可能卡在I/O(%wa高)或锁等待上。结合下一节的iostat和后续的进程状态判断。
  • 发现僵尸进程(Z状态):少量僵尸进程通常无害,父进程结束时会清理。如果大量出现,需要找到其父进程ID(PPID),检查对应程序是否有bug。
  • 某个进程CPU/内存异常高:记录下PID和命令名,使用ps aux | grep <PID>cat /proc/<PID>/status查看详细信息,判断是否为正常业务进程。

5. 第二项检查:内存与交换空间 (free)

内存不足会直接导致服务卡顿、OOM(Out-Of-Memory)进程被杀死。

操作与解读:

free -h

输出示例:

total used free shared buff/cache available Mem: 7.6G 3.2G 1.1G 345M 3.3G 3.7G Swap: 2.0G 0B 2.0G
  • -h参数让数据以人类易读的单位(G, M)显示。
  • 关键看available:这个值表示系统可供新应用程序使用的内存量,它比free更准确,因为buff/cache部分在需要时可以被回收。
  • 经验值:如果available内存长期低于总内存的10%,就需要关注,可能需要考虑优化应用或扩容内存。
  • Swap使用:查看Swap行的used。如果Swap被频繁使用(used值持续增长),说明物理内存严重不足,系统性能会因磁盘换入换出而急剧下降。Swap used > 0 是一个明确的警告信号。

深入分析内存使用: 如果free显示内存紧张,可以用tophtop排序找出内存消耗大的进程。还可以使用:

# 查看内存占用最高的10个进程 ps aux --sort=-%mem | head -11

6. 第三项检查:磁盘空间与I/O (df,du,iostat)

磁盘满是一个“低级”但后果严重的问题,会导致服务无法写入日志、数据库崩溃、系统无法登录等。

1. 检查磁盘空间使用率

df -h

输出示例:

Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 45G 2.0G 96% / /dev/vdb1 200G 50G 140G 26% /data
  • 重点关注Use%:通常报警阈值设置在80%或90%。像根目录/使用率达到96%,就是非常紧急的状态,必须立即清理。
  • 同时关注Inode使用率:文件数量爆满也会导致“磁盘空间不足”的假象。
    df -i

2. 定位大文件或大目录: 如果某个分区快满了,需要找到“元凶”。

# 查看当前目录下各子目录的大小 du -sh * # 或者查找指定目录下最大的10个文件或目录 du -a /path/to/dir | sort -n -r | head -n 10

3. 检查磁盘I/O性能: 系统卡顿,但CPU和内存都不高,很可能是磁盘I/O瓶颈。

# 查看磁盘整体统计信息(安装sysstat后) iostat -dx 1 5
  • -d显示设备统计。
  • -x显示扩展统计。
  • 1 5表示每秒刷新一次,共输出5次。
  • 关键指标
    • %util:设备利用率。接近100%表示设备接近满负荷。
    • await:平均I/O等待时间(毫秒)。值越大,说明I/O响应越慢。
    • svctm:平均服务时间(毫秒)。通常应小于await
    • 结合top中的%wa一起看,如果%wa%util都高,基本确定是磁盘I/O问题。

7. 第四项检查:关键服务状态 (systemctl)

确保核心业务服务在运行是巡检的根本目的。

操作与解读:

# 查看服务的状态,以nginx为例 systemctl status nginx

输出信息中重点关注:

  • Active:一行。active (running)是理想状态。如果是inactive (dead)failed,说明服务挂了。
  • Loaded:一行。显示单元文件是否正确加载。
  • 下方的日志片段:通常会显示最近的服务日志,可能包含错误信息。

常用服务管理命令

# 查看所有失败的服务 systemctl --failed # 查看某个服务的详细日志(journalctl需要sudo) sudo journalctl -u nginx -n 50 --no-pager # 查看nginx服务最后50行日志 sudo journalctl -u nginx --since "2023-10-01" --until "2023-10-02" # 查看时间范围日志 # 重启服务 sudo systemctl restart nginx # 设置开机自启 sudo systemctl enable nginx

巡检清单:你应该有一份自己负责的服务列表,例如:nginx,mysql,redis,docker,crond,sshd等。巡检时逐个检查。

8. 第五项检查:安全与登录日志 (last,who, 日志分析`)

安全无小事,检查异常登录是防范于未然。

1. 查看近期成功登录记录

last -n 20

这个命令读取/var/log/wtmp文件,显示最近的登录记录。关注陌生的用户名、IP地址和时间。

2. 查看当前登录用户

who

w

w命令信息更丰富,包括用户正在执行的命令。检查是否有非授权的当前登录。

3. 检查失败登录尝试(重点): 暴力破解攻击会留下大量失败记录。

# 对于使用 password 认证的 SSH,查看失败日志(CentOS/RHEL) sudo grep "Failed password" /var/log/secure | tail -20 # 或查看所有认证日志 sudo tail -50 /var/log/secure # 对于 Ubuntu/Debian,日志通常在 /var/log/auth.log sudo grep "Failed password" /var/log/auth.log | tail -20

输出会显示尝试登录的IP、用户名和时间。如果发现某个IP在短时间内有大量失败尝试,很可能正在被暴力破解。

4. 检查空密码或可疑授权

# 检查是否有空密码账户 sudo awk -F: '($2 == "") {print $1}' /etc/shadow # 检查sudoers列表 sudo cat /etc/sudoers | grep -v "^#" | grep -v "^$"

自动化安全巡检思路:对于这项检查,更佳实践是配置fail2ban等工具自动封禁恶意IP,并定期将日志汇总到SIEM(安全信息与事件管理)系统进行分析。

9. 资源占用与性能观察整合

将前几项的观察点整合起来,形成性能瓶颈分析的思路:

  1. CPU瓶颈top%Cpu(s)%us%sy持续高于80%,且负载load average持续高于CPU核心数。使用tophtop排序找出具体进程。
  2. 内存瓶颈free -h显示available内存极低,且Swapused值在增长。使用top按内存排序找出进程。
  3. I/O瓶颈top%Cpu(s)%wa高,同时iostat中磁盘的%util高、await高。可能是磁盘硬件慢,或某个进程在进行大量磁盘读写(用iotop命令查看)。
  4. 网络瓶颈:本文未详述,但可用sar -n DEV 1iftop命令查看网络接口流量和连接数。

10. 常见问题与排查方法

问题现象可能原因排查方式解决方案
SSH登录缓慢DNS解析问题、认证日志过大、GSSAPI认证ssh -vvv查看详细日志;检查/etc/ssh/sshd_configUseDNS设置;检查/var/log/secure/var/log/auth.log大小禁用UseDNS;清理或轮转日志;禁用GSSAPI认证
df显示磁盘满,但du找不到大文件文件已被删除,但进程仍持有句柄,空间未释放lsof | grep deleted查找被删除但仍被进程占用的文件重启持有该文件的进程,或清空该进程的输出(如日志)
服务systemctl status显示failed启动脚本错误、依赖服务未启动、端口被占用、权限问题sudo journalctl -u <服务名> -xe查看详细错误日志根据日志修正配置、解决依赖、更换端口或修改权限
负载很高,但CPU和I/O使用率都不高可能存在大量线程处于不可中断睡眠态(D状态),通常由I/O引起top查看%waps aux | grep “D”查看D状态进程;使用iostatiotop进一步分析优化导致高I/O的进程或查询,考虑升级磁盘(如HDD换SSD)
内存available持续减少,但无进程明显占用可能是内核或驱动内存泄漏检查slabtop观察内核内存使用;查看/proc/meminfo中的SUnreclaim项;重启服务器可临时解决更新内核或相关驱动版本,查找并修复泄漏源
发现大量来自同一IP的失败登录遭受SSH暴力破解攻击sudo grep “Failed password” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr统计IP使用fail2ban自动封禁;修改SSH端口;禁用密码登录改用密钥

11. 最佳实践与使用建议

  1. 制作巡检脚本:将上述关键命令写入一个Shell脚本(如server_check.sh),一键执行并输出格式化报告。这是从手动到自动的第一步。

    #!/bin/bash echo “========== $(date) 系统巡检 ==========” echo “1. 负载与运行时间:” uptime echo “” echo “2. 内存使用:” free -h echo “” echo “3. 磁盘空间:” df -h echo “” # ... 后续检查项
  2. 设定巡检基线:在业务平稳期运行巡检脚本,记录CPU负载、内存可用量、磁盘使用率等指标的“正常范围”。当指标持续偏离基线时,即使未触发报警,也应引起注意。

  3. 日志集中管理:将多台服务器的关键日志(如/var/log/messages,/var/log/secure)通过rsyslog或Fluentd收集到中央日志服务器(如ELK Stack),便于统一分析和关联排查。

  4. 与监控系统互补:手工巡检是“点”,监控系统是“面”。应将巡检脚本发现的关键指标(如特定进程是否存在)集成到Zabbix或Prometheus的自定义监控项中,实现自动告警。

  5. 文档化与交接:将巡检步骤、常见问题排查清单、服务重启顺序、关键配置文件路径等形成文档。这是团队知识沉淀和运维交接的核心。

这套“老师傅先看5项”的巡检方法,其价值在于提供了一个清晰、可执行的切入点。它不能解决所有问题,但能帮你快速排除80%的基础性故障。真正的运维深度在于,基于这些基础指标,结合业务逻辑,进一步分析链路追踪、应用性能监控和数据库慢查询。建议从固化这5项检查开始,逐步构建起属于你自己的、体系化的服务器运维监控能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询