Linux 系统监控十大必备命令

学习十个 Linux 监控命令,用于检查 CPU、内存、磁盘、网络套接字、负载和历史系统活动。

Linux 系统监控十大必备命令

当 Linux 服务器响应变慢时,你需要一些命令来告诉你压力来自 CPU、内存、磁盘、网络还是负载。这些 Linux 监控命令能帮助你从“服务器变慢了”过渡到具体的下一步操作。

下面这十个工具能提供快速快照、交互式视图和历史数据。请结合使用它们,而不是孤立地相信某一个数字。

1. top - 实时进程活动

top 命令提供运行中 Linux 系统的动态实时视图。它显示系统信息摘要以及 Linux 内核当前管理的进程或线程列表。这通常是管理员快速了解系统活动时首先使用的工具。

关键指标:

  • CPU 使用率us(用户态)、sy(系统态)、ni(优先级调整)、id(空闲)、wa(I/O 等待)、hi(硬件中断)、si(软件中断)、st(窃取时间)。
  • 内存使用率:总量、空闲、已用、缓冲区/缓存。
  • 交换空间使用率:总量、空闲、已用。
  • 进程列表:PID、用户、PR(优先级)、NI(nice 值)、VIRT(虚拟内存)、RES(常驻内存)、SHR(共享内存)、S(状态)、%CPU、%MEM、TIME+、COMMAND。

基本用法:

top

实用示例:

  • 按 CPU 使用率排序:在 top 中按 P
  • 按内存使用率排序:在 top 中按 M
  • 显示特定用户进程:在 top 中按 u 然后输入用户名。
  • 终止进程:在 top 中按 k 并输入 PID。

提示:

  • 1 切换显示单个 CPU 核心。
  • q 退出 top
  • 使用 top -bn1 获取单次快照(适用于脚本编写)。

2. htop - 交互式进程查看器

htop 是一个增强型、交互式且用户友好的进程查看器,相比传统的 top 命令有许多优势。它提供更美观、更易导航的界面,使监控和管理进程更加轻松。

主要优势:

  • 可视化仪表:CPU、内存和交换空间使用情况以图形方式显示。
  • 可滚动列表:可以垂直和水平滚动以查看所有进程及其完整命令行。
  • 便捷的进程管理:无需输入 PID,可直接使用功能键进行终止、调整优先级等操作。
  • 树形视图:进程可以以树形格式显示,展示父子关系。

基本用法:

# 可能需要安装:
# sudo apt install htop (Debian/Ubuntu)
# sudo yum install htop (RHEL/CentOS)
htop

实用示例:

  • 过滤进程:按 F4
  • 终止进程:选择进程,然后按 F9
  • 按不同列排序:使用 F6

提示:

  • 由于用户体验更佳,htop 通常更适合交互式监控。
  • 自定义 htop 的显示选项(F2)以适应你的工作流程。

3. vmstat - 虚拟内存统计

vmstat 命令报告有关进程、内存、分页、块 I/O、陷阱和 CPU 活动的信息。它是识别内存瓶颈或高磁盘 I/O 的绝佳工具。

关键指标:

  • r:等待运行时间的进程数。
  • b:处于不可中断睡眠状态的进程数(通常是 I/O)。
  • swpd:已使用的虚拟内存量。
  • free:空闲内存量。
  • si / so:从磁盘换入 / 换出到磁盘的内存量。
  • bi / bo:从块设备接收 / 发送到块设备的块数。
  • wa:等待 I/O 完成所花费的时间。

基本用法:

vmstat 1 5 # 每 1 秒报告一次,共 5 次

实用示例:

  • 显示活动/非活动内存vmstat -a
  • 显示 slab 信息vmstat -m
  • 显示磁盘统计信息vmstat -d

提示:

  • si/so 值通常表示内存压力和过度交换,这会严重降低性能。
  • 持续高 wa 百分比表明存在 I/O 瓶颈。

4. iostat - I/O 统计

iostatsysstat 包的一部分,报告设备、分区和网络文件系统的 CPU 利用率和 I/O 统计信息。对于理解磁盘性能问题至关重要。

关键指标:

  • %user%system%iowait%idle:CPU 利用率细分。
  • r/s / w/s:每秒读/写次数。
  • rkB/s / wkB/s:每秒读/写的千字节数。
  • await:I/O 请求被服务前的平均时间(毫秒)。
  • %util:设备有 I/O 请求正在处理的时间百分比。

基本用法:

# 可能需要安装:
# sudo apt install sysstat (Debian/Ubuntu)
# sudo yum install sysstat (RHEL/CentOS)
iostat -xz 1 5 # 扩展统计,每 1 秒一次,共 5 次

实用示例:

  • 特定设备监控iostat -xz /dev/sda 1
  • 仅显示 CPU 利用率iostat -c
  • 仅显示设备利用率iostat -d

提示:

  • %util 加上高 await 时间通常表明该设备存在 I/O 瓶颈。在现代 SSD 和虚拟化存储上,在假设磁盘饱和之前,请通过应用程序延迟进行确认。
  • rkB/swkB/sr/sw/s 进行比较,以了解平均 I/O 大小。

5. free - 内存使用情况

free 命令显示系统中空闲和已用物理内存及交换空间的总量,以及内核使用的缓冲区和缓存。

关键指标:

  • total:总安装内存。
  • used:已用内存(包括缓冲区/缓存)。
  • free:未使用内存。
  • shared:tmpfs 使用的内存(共享内存段)。
  • buff/cache:内核缓冲区和页面缓存使用的内存。
  • available:在不进行交换的情况下,可用于启动新应用程序的内存估计值。

基本用法:

free -h # 人类可读输出

实用示例:

  • 以兆字节显示内存free -m
  • 每 5 秒持续更新watch -n 5 free -h

提示:

  • available 列是了解真正有多少内存可用于新进程的最重要指标。
  • Linux 会积极使用可用内存进行磁盘缓存,因此 free 值低是正常的,通常也是可取的。

6. df - 磁盘空间使用情况

df 命令报告文件系统上已用和可用的磁盘空间量。对于监控存储容量和防止磁盘满的情况至关重要。

关键指标:

  • Filesystem:文件系统名称。
  • Size:文件系统总大小。
  • Used:已使用的磁盘空间量。
  • Avail:可用的磁盘空间量。
  • Use%:已使用的磁盘空间百分比。
  • Mounted on:文件系统的挂载点。

基本用法:

df -h # 人类可读输出

实用示例:

  • 显示 inode 使用情况df -i(inode 是元数据结构;耗尽 inode 会阻止文件创建,即使有空闲空间)。
  • 显示特定文件系统类型df -hT -t ext4

提示:

  • 定期检查 Use% 以防止文件系统填满,这可能导致应用程序故障和系统不稳定。
  • 高 inode 使用率可能是由于存在大量小文件。

7. du - 文件和目录的磁盘使用情况

du 命令估算文件空间使用情况。df 检查总文件系统使用情况,而 du 用于查找特定文件或目录的大小,这对于识别哪些内容消耗了磁盘空间至关重要。

关键指标:

  • 指定文件或目录的总大小。

基本用法:

du -sh /var/log # 摘要,人类可读,针对 /var/log 目录

实用示例:

  • 显示所有子目录的大小(一层深度)du -h --max-depth=1 /home/user
  • 查找最大的文件/目录du -ah /path/to/check | sort -rh | head -n 10

提示:

  • dusorthead 结合使用,可以快速定位磁盘空间占用大户。
  • 在大型目录上运行 du 时要小心,因为它可能消耗大量资源。

8. sar - 系统活动报告器

sarsysstat 包中的一个强大工具,用于收集、报告或保存系统活动信息。与显示实时快照的 topvmstat 不同,sar 擅长提供历史数据,使其在长期性能分析和容量规划中非常宝贵。

主要功能:

  • CPU 统计信息%user%nice%system%iowait%steal%idle
  • 内存统计信息kbmemfreekbmemusedkbbufferskbcached
  • 磁盘 I/Otpsrd_sec/swr_sec/s
  • 网络统计信息rxpck/stxpck/srxbyt/stxbyt/s
  • 负载平均值交换活动内核活动等。

基本用法:

# 每 1 秒报告 CPU 利用率,共 5 次:
sar -u 1 5
# 报告磁盘活动:
sar -d
# 报告内存利用率:
sar -r
# 报告网络统计信息:
sar -n DEV

实用示例:

  • 查看保存的 CPU 活动文件:在许多基于 Debian 的系统上使用 sar -u -f /var/log/sysstat/saDD,或在许多基于 RHEL 的系统上使用 /var/log/sa/saDD。将 DD 替换为月份中的日期。
  • 显示今天收集的所有数据sar -A

提示:

  • 确保 sysstat 包已安装并配置为定期收集数据,以便进行历史分析。
  • sar 可能信息量很大;专注于与你调查相关的特定标志(-u-r-d-n)。

9. ss(套接字统计)- 网络连接

ss 是一个用于调查套接字的实用程序。它是旧版 netstat 命令更快、更高效的替代品,提供有关 TCP、UDP 和其他套接字类型的更详细信息,包括它们的状态、本地/远程地址和进程 ID。

关键指标:

  • 状态ESTABLISTENTIME-WAITCLOSE-WAIT 等。
  • Recv-Q / Send-Q:接收和发送队列大小。
  • 本地地址:端口 / 对端地址:端口:本地和远程端点。
  • 进程名称:与套接字关联的进程。

基本用法:

ss -tuln # TCP、UDP、监听、数字端口

实用示例:

  • 列出所有 TCP 连接ss -t
  • 列出所有 UDP 连接ss -u
  • 显示监听特定端口的进程ss -tulnp | grep 80
  • 汇总套接字统计信息ss -s

提示:

  • 大量的 TIME-WAIT 套接字并不自动意味着问题;在繁忙的 TCP 服务上这可能是正常的。在将其视为问题之前,请结合端口耗尽、连接失败或队列增长等情况进行判断。
  • 监控 Recv-QSend-Q 以发现网络缓冲问题或应用程序处理缓慢的迹象。

10. uptime - 系统运行时间和负载平均值

uptime 命令显示系统已运行了多长时间、当前时间、登录用户数以及过去 1、5 和 15 分钟的系统负载平均值。

关键指标:

  • 当前时间:不言自明。
  • 运行时间:系统已运行了多长时间。
  • 用户数:当前登录的用户数。
  • 负载平均值:处于可运行或不可中断状态的进程的平均数。这包括在 CPU 上运行的进程、等待 CPU 的进程或等待磁盘 I/O 的进程。
    • 1 分钟负载平均值
    • 5 分钟负载平均值
    • 15 分钟负载平均值

基本用法:

uptime

实用示例:

  • 通常用作服务器整体繁忙程度的快速健康检查。

提示:

  • 将负载平均值与系统上的 CPU 核心数进行比较。持续高于 CPU 核心数的负载平均值通常表示 CPU 或 I/O 瓶颈。
  • 负载平均值随时间增加(例如,1 分钟 > 5 分钟 > 15 分钟)表明系统正变得越来越繁忙。

一个简单的故障排除流程

对于响应缓慢的服务器,首先使用 uptime 检查负载,然后使用 tophtop 查找繁忙进程。使用 free -hvmstat 1 5 检查内存压力,使用 iostat -xz 1 5 检查磁盘延迟,使用 ss -tulnp 检查监听服务或积压的套接字。如果问题发生在更早的时间,使用 sar 将异常时段与正常时段进行比较。

要点很简单:每个命令都回答了故事的一部分。你的任务是在重启服务或调整机器大小之前,将 CPU、内存、磁盘和网络的证据串联起来。