Linux 系统监控十大必备命令

通过这份综合指南,解锁 Linux 系统监控的强大功能,了解十大必备命令。学习如何使用 `top`、`htop`、`vmstat`、`iostat`、`free`、`df`、`du`、`sar`、`ss` 和 `uptime`,以实时洞察 CPU、内存、磁盘 I/O 和网络性能。本文提供了实际示例、关键指标解释以及可操作的技巧,旨在帮助系统管理员高效诊断问题、跟踪资源利用率,并确保其 Linux 系统的稳定性。

42 浏览量

Linux系统监控的十大必备命令

Linux系统是全球无数应用程序、服务和基础设施组件的支柱。确保其稳定性、性能和资源可用性是任何系统管理员的一项关键职责。主动监控有助于在问题升级之前识别瓶颈、预见问题并保持最佳系统健康状况。

本文将深入探讨每个Linux管理员都应掌握的十个最 essential 命令,用于实时系统性能分析和资源跟踪。这些工具提供了对系统各个方面的宝贵见解,从CPU和内存利用率到磁盘I/O和网络活动。通过理解和定期使用这些命令,您可以有效地诊断性能问题,识别资源占用者,并确保您的Linux系统平稳运行。

无论您是在排除服务器缓慢故障、优化资源分配,还是仅仅执行常规的健康检查,这里介绍的命令都构成了有效的Linux系统监控的基础。让我们一起探索这些不可或缺的工具,以及如何利用它们来构建一个更健康、性能更佳的Linux环境。

1. top - 实时进程活动

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

主要指标:

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

基本用法:

top

实用示例:

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

提示:

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

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

htop 是一个增强的、交互式的、用户友好的进程查看器,与传统的 top 命令相比具有许多优势。它提供了更具视觉吸引力和易于导航的界面,使得监控和管理进程更加容易。

主要优点:

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

基本用法:

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

实用示例:

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

提示:

  • 由于其卓越的用户体验,htop 通常是交互式监控的首选。
  • 自定义 htop 的显示选项 (F2) 以适应您的工作流程。

3. vmstat - 虚拟内存统计

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

主要指标:

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

基本用法:

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

实用示例:

  • 以表格形式显示所有统计信息: vmstat -a
  • 显示活动/非活动内存: vmstat -a
  • 显示slabinfo: 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: 在CPU时间内向设备发出I/O请求的百分比。

基本用法:

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

实用示例:

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

提示:

  • %util(接近100%)结合高 await 时间表明该设备存在I/O瓶颈。
  • 比较 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
  • 内存统计信息: kbmemfree, kbmemused, kbbuffers, kbcached
  • 磁盘I/O: tps, rd_sec/s, wr_sec/s
  • 网络统计信息: rxpck/s, txpck/s, rxbyt/s, txbyt/s
  • 负载平均值swap活动内核活动等。

基本用法:

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

实用示例:

  • 查看昨天的CPU活动: sar -u -f /var/log/sysstat/saDD(将DD替换为当月日期)
  • 显示今天所有收集的数据: sar -A

提示:

  • 确保安装了 sysstat 包并配置为定期收集数据以进行历史分析。
  • sar 可能令人不知所措;专注于与您的调查相关的特定标志(-u, -r, -d, -n)。

9. ss (Socket Statistics) - 网络连接

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

主要指标:

  • State: ESTAB, LISTEN, TIME-WAIT, CLOSE-WAIT 等。
  • Recv-Q / Send-Q: 接收和发送队列的大小。
  • Local Address:Port / Peer Address:Port: 本地和远程端点。
  • Process Name: 与套接字关联的进程。

基本用法:

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

实用示例:

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

提示:

  • 注意异常多的 TIME-WAIT 连接,这可能表明客户端问题或Web服务器配置不当。
  • 监控 Recv-QSend-Q 以发现网络缓冲问题或应用程序处理缓慢的迹象。

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

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

主要指标:

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

基本用法:

uptime

实用示例:

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

提示:

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

结论

掌握这十个 essential 的Linux命令是任何专注于监控和维护健康、高性能系统的系统管理员的基础。从使用 tophtop 快速识别CPU峰值,到使用 iostat 诊断磁盘I/O瓶颈,再到使用 vmstat 诊断内存压力,这些工具提供了一个全面的工具包,用于主动的系统管理。

将这些命令定期纳入您的监控例程,理解它们的输出,并知道何时使用它们,将使您能够有效地排除故障、优化资源利用率,并确保您的Linux基础设施的可靠性。继续探索它们的选项,并将它们集成到您的脚本中以进行自动化报告,以提升您的系统管理能力。祝您监控愉快!