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 统计
iostat 是 sysstat 包的一部分,报告设备、分区和网络文件系统的 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/s和wkB/s与r/s和w/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
提示:
- 将
du与sort和head结合使用,可以快速定位磁盘空间占用大户。 - 在大型目录上运行
du时要小心,因为它可能消耗大量资源。
8. sar - 系统活动报告器
sar 是 sysstat 包中的一个强大工具,用于收集、报告或保存系统活动信息。与显示实时快照的 top 或 vmstat 不同,sar 擅长提供历史数据,使其在长期性能分析和容量规划中非常宝贵。
主要功能:
- CPU 统计信息:
%user、%nice、%system、%iowait、%steal、%idle。 - 内存统计信息:
kbmemfree、kbmemused、kbbuffers、kbcached。 - 磁盘 I/O:
tps、rd_sec/s、wr_sec/s。 - 网络统计信息:
rxpck/s、txpck/s、rxbyt/s、txbyt/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。
关键指标:
- 状态:
ESTAB、LISTEN、TIME-WAIT、CLOSE-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-Q和Send-Q以发现网络缓冲问题或应用程序处理缓慢的迹象。
10. uptime - 系统运行时间和负载平均值
uptime 命令显示系统已运行了多长时间、当前时间、登录用户数以及过去 1、5 和 15 分钟的系统负载平均值。
关键指标:
- 当前时间:不言自明。
- 运行时间:系统已运行了多长时间。
- 用户数:当前登录的用户数。
- 负载平均值:处于可运行或不可中断状态的进程的平均数。这包括在 CPU 上运行的进程、等待 CPU 的进程或等待磁盘 I/O 的进程。
- 1 分钟负载平均值
- 5 分钟负载平均值
- 15 分钟负载平均值
基本用法:
uptime
实用示例:
- 通常用作服务器整体繁忙程度的快速健康检查。
提示:
- 将负载平均值与系统上的 CPU 核心数进行比较。持续高于 CPU 核心数的负载平均值通常表示 CPU 或 I/O 瓶颈。
- 负载平均值随时间增加(例如,1 分钟 > 5 分钟 > 15 分钟)表明系统正变得越来越繁忙。
一个简单的故障排除流程
对于响应缓慢的服务器,首先使用 uptime 检查负载,然后使用 top 或 htop 查找繁忙进程。使用 free -h 和 vmstat 1 5 检查内存压力,使用 iostat -xz 1 5 检查磁盘延迟,使用 ss -tulnp 检查监听服务或积压的套接字。如果问题发生在更早的时间,使用 sar 将异常时段与正常时段进行比较。
要点很简单:每个命令都回答了故事的一部分。你的任务是在重启服务或调整机器大小之前,将 CPU、内存、磁盘和网络的证据串联起来。