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统计
iostat 是 sysstat 包的一部分,用于报告设备、分区和网络文件系统的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/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。 - 负载平均值、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-Q和Send-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命令是任何专注于监控和维护健康、高性能系统的系统管理员的基础。从使用 top 和 htop 快速识别CPU峰值,到使用 iostat 诊断磁盘I/O瓶颈,再到使用 vmstat 诊断内存压力,这些工具提供了一个全面的工具包,用于主动的系统管理。
将这些命令定期纳入您的监控例程,理解它们的输出,并知道何时使用它们,将使您能够有效地排除故障、优化资源利用率,并确保您的Linux基础设施的可靠性。继续探索它们的选项,并将它们集成到您的脚本中以进行自动化报告,以提升您的系统管理能力。祝您监控愉快!