Linux系统作为服务器领域的主流操作系统,其性能监测能力是运维和开发人员必须掌握的核心技能。通过系统自带的工具可以快速获取CPU、内存、磁盘、网络等维度的运行状态,无需额外安装复杂软件即可完成基础性能排查。

常用原生监测工具介绍
1. top命令:实时进程与CPU监控
top是Linux系统中最常用的实时性能监测工具,默认每隔3秒刷新一次系统状态,能够展示整体CPU占用、内存使用情况以及各个进程的资源消耗排名。
直接在终端执行以下命令即可启动:
# 启动top实时监测工具 top
输出内容主要分为两部分:
- 顶部系统概览:包含当前时间、运行时长、登录用户数、系统负载(1分钟、5分钟、15分钟平均负载)、CPU使用率(用户态、内核态、空闲等占比)、内存与交换分区使用情况。
- 进程列表:默认按CPU使用率降序排列,展示进程ID、所属用户、CPU占用、内存占用、进程状态、启动命令等信息。
常用交互操作:
- 按
P键:按CPU使用率排序进程 - 按
M键:按内存使用率排序进程 - 按
q键:退出top工具 - 按
1键:展开显示所有CPU核心的使用情况
2. vmstat:系统整体资源统计
vmstat可以输出系统整体的CPU、内存、交换分区、IO、上下文切换等核心指标,适合快速查看系统整体负载趋势,默认只输出一次结果,也可以指定刷新间隔和次数。
使用示例:
# 每2秒输出一次统计结果,共输出5次 vmstat 2 5
输出字段含义说明:
| 字段分类 | 字段名 | 含义说明 |
|---|---|---|
| CPU相关 | us | 用户态进程占用CPU百分比 |
| sy | 内核态进程占用CPU百分比 | |
| id | CPU空闲百分比 | |
| wa | 等待IO的CPU百分比,该值过高说明磁盘IO存在瓶颈 | |
| 内存相关 | swpd | 使用的交换分区大小,单位KB |
| free | 空闲物理内存大小,单位KB | |
| IO相关 | bi/bo | 每秒读入/写出的磁盘块数,单位KB |
3. iostat:磁盘IO性能监测
iostat专门用于监测磁盘IO性能,能够展示每个磁盘的读写速率、IO等待时间、使用率等指标,是排查磁盘性能问题的核心工具,部分系统需要先安装sysstat包才能使用。
使用示例:
# 安装sysstat包(CentOS/RHEL系统) yum install -y sysstat # 每2秒输出一次磁盘IO统计,共输出3次,显示扩展信息 iostat -x 2 3
关键指标说明:
%util:磁盘使用率,该值接近100%说明磁盘已经满负载运行await:平均IO等待时间,包含队列等待时间和实际处理时间,单位毫秒rkB/s/wkB/s:每秒读/写磁盘的数据量,单位KB
网络性能监测方法
除了CPU、内存、磁盘之外,网络性能也是Linux系统监测的重要部分,常用的原生工具包括ifstat和ss:
ifstat可以实时查看各个网络接口的收发速率:
# 安装ifstat(CentOS/RHEL系统) yum install -y ifstat # 查看网络接口流量 ifstat
ss是替代netstat的新一代网络统计工具,能够查看网络连接、端口监听、套接字状态等信息:
# 查看所有TCP监听端口 ss -tlnp # 查看所有ESTABLISHED状态的TCP连接 ss -tn state established
性能分析基本思路
当系统出现性能问题时,可以按照以下顺序逐步排查:
- 先用
top查看整体CPU和内存占用,确认是否有进程异常占用资源 - 如果CPU的
wa值过高,用iostat排查磁盘IO是否存在瓶颈 - 如果内存占用过高,用
free -h查看内存使用分布,确认是缓存占用还是进程实际内存泄漏 - 如果服务响应慢,用
ss查看网络连接数和端口状态,确认是否存在网络瓶颈
注意:系统负载(load average)需要和CPU核心数对比才有参考意义,比如4核CPU的负载为4属于满负载,而8核CPU的负载为4则属于正常状态。
自定义监测脚本示例
如果需要定期记录系统性能状态,可以编写简单的Shell脚本,将关键指标输出到日志文件中:
#!/bin/bash # 系统性能监测日志脚本 LOG_FILE="/var/log/system_perf.log" # 记录当前时间 echo "===== 监测时间: $(date '+%Y-%m-%d %H:%M:%S') =====" >> $LOG_FILE # 记录CPU和内存概览(取top前5行) echo "--- 系统概览 ---" >> $LOG_FILE top -b -n 1 | head -5 >> $LOG_FILE # 记录磁盘IO状态 echo "--- 磁盘IO状态 ---" >> $LOG_FILE iostat -x 1 1 >> $LOG_FILE # 记录网络接口流量 echo "--- 网络流量 ---" >> $LOG_FILE ifstat 1 1 >> $LOG_FILE echo "" >> $LOG_FILE
给脚本添加执行权限后,可以通过crontab设置每分钟执行一次,长期记录系统性能变化趋势,方便后续排查间歇性性能问题。