服务器设置和教程 · 12 2 月, 2026

Ubuntu 服务器 CPU、内存、磁盘性能监控方法

在生产环境运行 Ubuntu 服务器时,及时、准确地监控 CPU、内存、磁盘三大核心资源的使用情况,是避免性能瓶颈、提前发现异常、规划扩容的基础。本文按“实时查看 → 历史趋势 → 自动化监控”三个层次,介绍最实用、最常使用的监控方法,适用于 22.04 / 24.04 LTS 及后续版本。

一、实时监控

这些命令适合 SSH 登录后立即执行,判断服务器当前是否“健康”。

1. CPU 使用情况

  • top / htop(最常用)
    • top:系统自带,按 1 显示每个核心使用率,按 P 按 CPU 排序
    • htop:强烈推荐提前安装(sudo apt install htop),界面友好,支持鼠标、颜色、树形进程
    • 关注指标:%Cpu(s) 的 us(用户)、sy(系统)、id(空闲)、wa(IO 等待)
  • mpstat(查看每个核心)
    text
    sudo apt install sysstat
    mpstat 1 5   # 每秒刷新一次,共 5 次
  • vmstat(简洁概览) vmstat 1 # 每秒刷新,关注 cpu 列的 us/sy/id/wa

2. 内存使用情况

  • free -h(最直观) 重点看 available 列(真正可用的内存),而非 free 列 Swap 使用率 > 10% 通常说明内存压力大
  • vmstat(内存列 si/so 表示换入/换出) vmstat 1 # si/so 持续 > 0 说明频繁 swap,很危险
  • smem(更精确的用户/进程内存占用,需安装 sudo apt install smem)

3. 磁盘性能(I/O 等待 + 使用率)

  • iostat(最核心磁盘 IO 工具)
    text
    iostat -x 1 5    # -x 显示扩展统计,每秒一次,共 5 次

    关注指标:

    • %util:磁盘利用率(接近 100% 表示瓶颈)
    • await:平均每个 IO 的等待时间(> 10ms 偏高,> 20ms 很严重)
    • r/s、w/s:读写 IOPS
    • rkB/s、wkB/s:吞吐量
  • iotop(类似 top 的磁盘 IO 版) sudo apt install iotop sudo iotop -o # 只显示有 IO 的进程
  • df -h / df -i 空间使用率和 inode 使用率(inode 满会导致“磁盘已满但 du 看不出来”)

二、历史趋势与周期性数据(sysstat 套件)

sysstat 是 Ubuntu 上最经典的性能历史记录工具,安装后自动采集 sar 数据。

安装:

Bash
sudo apt install sysstat
sudo systemctl enable --now sysstat

常用 sar 命令(历史数据):

命令含义关注指标
sar -u 1 5CPU 使用率(实时)%user %system %idle %iowait
sar -u当天 CPU 历史看高峰期 %iowait 是否高
sar -r内存使用历史%memused kbmemfree kbbuffers kbscached
sar -d磁盘 IO 历史await svctm %util
sar -n DEV 1 5网卡流量rxkB/s txkB/s
sar -q负载平均值与运行队列runq-sz ldavg-1 ldavg-5

小技巧:把 sar 做成每日邮件报告(cron 任务):

Bash
0 8 * * * /usr/bin/sar -u -r -q -n DEV | mail -s "服务器性能日报" your@email.com

三、推荐的现代化一键监控方案(生产首选)

1. netdata(最推荐,安装即用)

  • 一键安装:
    Bash
    bash <(curl -Ss https://my-netdata.io/kickstart.sh)
  • 特点:
    • 浏览器访问 http://你的IP:19999
    • 实时 + 历史(默认保留几天到几个月)
    • CPU、内存、磁盘 IO、网卡、进程、温度、Docker 等全覆盖
    • 告警功能强大(可接 Slack、邮件、微信)
    • 资源占用极低(<1% CPU)

2. prometheus + node_exporter + grafana

适合多台服务器统一监控:

  • node_exporter 采集指标
  • prometheus 存储 + 查询
  • grafana 做漂亮仪表盘

3. 极简脚本监控(适合小型环境)

写一个 shell 脚本,每分钟跑一次,达到阈值发邮件/企业微信:

Bash
#!/bin/bash
LOAD=$(uptime | awk '{print $(NF-2)}' | tr -d ',')
MEM_USED=$(free -m | awk '/Mem/{printf("%.0f"), $3/$2*100}')
DISK_USED=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

if [ ${LOAD%.*} -gt 8 ] || [ $MEM_USED -gt 85 ] || [ ${DISK_USED%?} -gt 90 ]; then
    echo "警报!负载:$LOAD 内存:$MEM_USED% 磁盘:$DISK_USED%" | mail -s "服务器资源告警" ops@company.com
fi

四、性能监控黄金排查顺序

服务器变慢/卡顿时,按以下顺序 1 分钟内初步定位:

  1. uptime → 负载是否 > 核心数 × 1.5–2
  2. free -h → available 内存 < 总内存 20%?
  3. vmstat 1 5 → wa(iowait)是否持续 > 20–30%?
  4. iostat -x 1 5 → 磁盘 %util 是否接近 100%?await 是否 > 10–20ms?
  5. top/htop → 前几名进程是否异常吃 CPU/内存?
  6. sar -u -r -d(历史)→ 对比平时高峰值

五、总结:不同规模的监控选择

服务器规模推荐方案复杂度成本
1–5 台netdata(单机版)几乎 0
5–50 台netdata(父子云)或 prometheus+grafana低–中
50+ 台prometheus + grafana + alertmanager中–高
无论规模,先把 netdata 装上,能覆盖 90% 的日常监控需求。熟练掌握 sar / iostat / vmstat 后,你就能从“感觉卡”变成“数据说话”,大大提升故障定位效率。