sysstat是一套强大的系统性能监控工具集,其中sar
命令可以收集和报告系统活动信息。结合图形化工具,可以更直观地分析系统性能数据。
在大多数Linux发行版上安装sysstat:
# Debian/Ubuntu
sudo apt-get install sysstat
# RHEL/CentOS
sudo yum install sysstat
# 启用数据收集
sudo systemctl enable sysstat
sudo systemctl start sysstat
# CPU使用率
sar -u 1 5 # 每1秒采样一次,共5次
# 内存使用情况
sar -r 1 5
# I/O统计
sar -b 1 5
# 网络统计
sar -n DEV 1 5
sysstat默认每10分钟收集一次数据并存储在/var/log/sa/
或/var/log/sysstat/
目录下。
查看特定日期的数据:
sar -u -f /var/log/sa/sa15 # 查看15号的数据
ksar是一个Java-based的sar数据可视化工具。
安装:
# Debian/Ubuntu
sudo apt-get install ksar
# 或从官网下载
wget https://github.com/vlsi/ksar/releases/download/v5.2.4/ksar-5.2.4.zip
unzip ksar-5.2.4.zip
使用:
# 导出sar数据为文本格式
sar -A -f /var/log/sa/sa15 > sar_data.txt
# 使用ksar打开
java -jar kSar.jar -input sar_data.txt
# 将sar数据转换为CSV格式
sadf -d /var/log/sa/sa15 -- -u > cpu_data.csv
# 使用gnuplot绘图
gnuplot -p -e "plot 'cpu_data.csv' using 4:5 with lines title 'CPU Usage'"
import pandas as pd
import matplotlib.pyplot as plt
# 读取sar数据
df = pd.read_csv('cpu_data.csv', sep=';')
# 转换时间格式
df['timestamp'] = pd.to_datetime(df['# timestamp'])
# 绘制CPU使用率
plt.figure(figsize=(12,6))
plt.plot(df['timestamp'], df['%user'], label='User CPU')
plt.plot(df['timestamp'], df['%system'], label='System CPU')
plt.plot(df['timestamp'], df['%iowait'], label='I/O Wait')
plt.legend()
plt.title('CPU Usage Analysis')
plt.xlabel('Time')
plt.ylabel('Percentage')
plt.grid()
plt.show()
# 查看CPU使用率历史
sar -u -f /var/log/sa/sa15
# 查看单个CPU核心使用情况
sar -P ALL 1 5
图形化关注点: - 用户态(%user)和内核态(%system)CPU使用比例 - I/O等待(%iowait)是否过高 - 空闲时间(%idle)是否充足
# 查看内存使用历史
sar -r -f /var/log/sa/sa15
# 查看页面交换情况
sar -W 1 5
图形化关注点: - 内存使用趋势 - 交换分区使用情况 - 页面交换频率
# 查看磁盘I/O统计
sar -b -d -p 1 5
图形化关注点: - 读写吞吐量 - I/O等待时间 - 设备利用率
# 查看网络接口统计
sar -n DEV 1 5
图形化关注点: - 网络吞吐量(rxKB/s, txKB/s) - 错误包和丢包数量 - 接口利用率
可以编写脚本定期生成性能报告:
#!/bin/bash
DATE=$(date +%d)
REPORT_DIR="/var/log/sa/reports"
mkdir -p $REPORT_DIR
# CPU报告
sar -u -f /var/log/sa/sa$DATE > $REPORT_DIR/cpu_$DATE.txt
sadf -d /var/log/sa/sa$DATE -- -u > $REPORT_DIR/cpu_$DATE.csv
# 内存报告
sar -r -f /var/log/sa/sa$DATE > $REPORT_DIR/mem_$DATE.txt
# 生成简单图表
gnuplot << EOF
set terminal png
set output "$REPORT_DIR/cpu_usage_$DATE.png"
set title "CPU Usage - $(date +%Y-%m-%d)"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M"
set xlabel "Time"
set ylabel "Percentage"
plot "$REPORT_DIR/cpu_$DATE.csv" using 3:5 title "User" with lines, \
"$REPORT_DIR/cpu_$DATE.csv" using 3:6 title "System" with lines, \
"$REPORT_DIR/cpu_$DATE.csv" using 3:7 title "I/O Wait" with lines
EOF
通过图形化分析sar数据,可以更直观地发现系统性能瓶颈和异常情况,帮助进行容量规划和性能优化。