Linux系统性能监控详细教程
在Linux系统开发中,监控系统性能是优化资源利用、排查问题的关键。本教程将涵盖CPU、内存、磁盘、网络等核心资源的监控工具与方法,并提供实战案例。
一、监控工具分类
类型 | 工具示例 | 核心功能 |
---|---|---|
实时监控 | top , htop , glances | 实时查看系统资源使用情况 |
历史分析 | sar , sysstat | 记录并分析历史性能数据 |
深度分析 | perf , strace | 跟踪进程系统调用、函数级性能分析 |
可视化 | Prometheus + Grafana | 构建实时监控仪表盘 |
二、核心工具使用详解
1. 实时监控工具
(1) top
- 基础实时监控
-
安装:所有Linux发行版默认集成。
-
使用:
top
-
关键指标:
-
%CPU:进程CPU占用率。
-
%MEM:进程内存占用率。
-
LOAD AVERAGE:系统负载(1/5/15分钟)。
-
-
交互命令:
-
P
:按CPU排序。 -
M
:按内存排序。 -
k
:终止进程。
-
(2) htop
- 增强版top
-
安装:
sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL
-
使用:
htop
-
优势:
-
彩色界面,支持鼠标操作。
-
树状视图展示进程层级。
-
(3) glances
- 综合监控
-
安装:
pip install glances
-
使用:
glances
-
功能:
-
实时监控CPU、内存、磁盘、网络、进程。
-
Web界面支持(通过
-w
启用)。
-
2. 历史数据分析工具
(1) sar
- 系统活动报告
-
安装:
sudo apt install sysstat # Debian/Ubuntu sudo yum install sysstat # CentOS/RHEL
-
启用数据收集:
sudo systemctl enable sysstat sudo systemctl start sysstat
-
查看CPU历史数据:
sar -u -f /var/log/sysstat/saXX # XX为日志文件日期(如sa05)
-
关键选项:
-
-r
:内存使用。 -
-d
:磁盘I/O。 -
-n DEV
:网络流量。
-
(2) sysstat
工具集
-
iostat
- 磁盘I/O监控:iostat -x 1 # 每1秒刷新一次,显示详细磁盘统计
-
关键字段:
-
%util
:磁盘利用率(接近100%表示瓶颈)。 -
await
:I/O请求平均等待时间。
-
-
-
vmstat
- 虚拟内存统计:vmstat 1 # 每1秒刷新一次
-
关键字段:
-
r
:运行队列中的进程数。 -
si/so
:Swap换入/换出频率。
-
-
3. 深度分析工具
(1) perf
- 性能分析
-
安装:
sudo apt install linux-tools-common linux-tools-$(uname -r)
-
分析CPU热点:
perf top # 实时查看函数级CPU占用 perf record -g ./your_app # 记录程序运行数据 perf report # 生成分析报告
(2) strace
- 系统调用跟踪
-
跟踪进程系统调用:
strace -p <PID> # 跟踪指定进程 strace -c ./your_app # 统计系统调用次数
4. 网络监控工具
(1) nload
- 实时流量监控
-
安装:
sudo apt install nload # Debian/Ubuntu sudo yum install nload # CentOS/RHEL
-
使用:
nload eth0 # 监控eth0网卡流量
(2) iftop
- 网络连接监控
-
安装:
sudo apt install iftop # Debian/Ubuntu sudo yum install iftop # CentOS/RHEL
-
使用:
iftop -i eth0 # 按流量排序显示网络连接
5. 高级可视化监控
(1) Prometheus + Grafana
-
安装Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz tar xvfz prometheus-*.tar.gz cd prometheus-* ./prometheus --config.file=prometheus.yml
-
安装Node Exporter(采集主机指标):
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz tar xvfz node_exporter-*.tar.gz cd node_exporter-* ./node_exporter
-
安装Grafana:
sudo apt install grafana # Debian/Ubuntu sudo systemctl start grafana-server
-
配置Dashboard:
-
访问
http://localhost:3000
,导入模板(如ID:8919)。
-
三、实战案例:定位CPU瓶颈
步骤1:快速定位高CPU进程
top - 14:30:00 up 2 days, 1 user, load average: 4.56, 3.22, 2.15
Tasks: 256 total, 1 running, 255 sleeping, 0 stopped, 0 zombie
%Cpu(s): 98.7 us, 1.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1234 appuser 20 0 123456 78900 1234 R 98.7 2.3 10:23.45 cpu_intensive
步骤2:分析进程具体行为
perf top -p 1234
Samples: 1M of event 'cycles:ppp', 4000 Hz, Event count (approx.): 9876543210
Overhead Shared Object Symbol98.76% cpu_intensive [.] main.loop_function1.24% libc-2.31.so [.] __random_r
步骤3:优化代码
根据perf
结果,优化loop_function
中的算法或减少循环次数。
四、自动化监控脚本示例
#!/bin/bash
# 监控CPU和内存使用,记录到日志
LOG_FILE="/var/log/system_monitor.log"
echo "Timestamp | CPU Usage | Memory Usage" >> $LOG_FILE
while true; doTIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')MEM=$(free -m | awk '/Mem/{printf "%.2f%%", $3/$2*100}')echo "$TIMESTAMP | $CPU% | $MEM" >> $LOG_FILEsleep 60
done
五、工具选型建议
场景 | 推荐工具组合 |
---|---|
快速问题定位 | htop + iostat + iftop |
长期性能分析 | sar + Prometheus + Grafana |
代码级优化 | perf + strace |
通过以上工具和方法,您可以全面监控Linux系统的性能,快速定位瓶颈并进行优化。