系统监控与性能调优
系统性能监控基础
1. 性能指标概述
主要性能指标
# CPU性能指标
- CPU使用率 (%CPU)
- 负载平均值 (Load Average)
- 上下文切换 (Context Switches)
- 中断次数 (Interrupts)
# 内存性能指标
- 内存使用率 (%MEM)
- 可用内存 (Available Memory)
- 缓存和缓冲区 (Cache/Buffer)
- 交换空间使用 (Swap Usage)
# 磁盘I/O指标
- 读写速度 (Read/Write Speed)
- IOPS (Input/Output Operations Per Second)
- I/O等待时间 (I/O Wait)
- 磁盘使用率 (Disk Utilization)
# 网络性能指标
- 网络吞吐量 (Network Throughput)
- 数据包丢失率 (Packet Loss)
- 网络延迟 (Network Latency)
- 连接数 (Connection Count)
2. 系统负载理解
负载平均值解释
# 查看系统负载
uptime
# 输出示例: 15:30:01 up 10 days, 5:42, 2 users, load average: 0.15, 0.25, 0.30
# 负载平均值含义
# 第一个数字: 1分钟平均负载
# 第二个数字: 5分钟平均负载
# 第三个数字: 15分钟平均负载
# 负载评估标准
# 单核CPU: 负载1.0表示100%利用率
# 双核CPU: 负载2.0表示100%利用率
# 四核CPU: 负载4.0表示100%利用率
# 查看CPU核心数
nproc
cat /proc/cpuinfo | grep processor | wc -l
系统监控工具
1. 基础监控命令
top - 实时进程监控
top # 基本top命令
top -u username # 显示特定用户进程
top -p PID # 监控特定进程
# top交互命令
P # 按CPU使用率排序
M # 按内存使用率排序
T # 按运行时间排序
k # 杀死进程
r # 重新设置进程优先级
1 # 显示所有CPU核心
q # 退出
# top输出解释
# PID: 进程ID
# USER: 进程所有者
# PR: 优先级
# NI: Nice值
# VIRT: 虚拟内存
# RES: 物理内存
# SHR: 共享内存
# S: 进程状态
# %CPU: CPU使用率
# %MEM: 内存使用率
# TIME+: CPU时间
# COMMAND: 命令名
htop - 增强版top
# 安装htop
sudo apt install htop # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL
htop # 启动htop
# htop特性
# - 彩色显示
# - 鼠标支持
# - 树形进程显示
# - 可视化CPU/内存使用
# - 更友好的界面
ps - 进程快照
ps aux # 显示所有进程
ps aux --sort=-%cpu # 按CPU使用率排序
ps aux --sort=-%mem # 按内存使用率排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem # 自定义输出
# 查看进程树
ps auxf # 显示进程树
pstree # 树形显示进程
pstree -p # 显示PID
2. 内存监控
free - 内存使用情况
free # 显示内存使用
free -h # 人性化显示
free -m # 以MB为单位
free -s 5 # 每5秒刷新一次
# 输出解释
# total used free shared buff/cache available
# Mem: 7.7G 2.1G 3.2G 180M 2.4G 5.2G
# Swap: 2.0G 0B 2.0G
# total: 总内存
# used: 已使用内存
# free: 空闲内存
# shared: 共享内存
# buff/cache: 缓冲区和缓存
# available: 可用内存 (包括可释放的缓存)
vmstat - 虚拟内存统计
vmstat # 显示虚拟内存统计
vmstat 5 # 每5秒显示一次
vmstat 5 10 # 每5秒显示一次,共10次
# 输出字段解释
# procs: r(运行队列), b(阻塞进程)
# memory: swpd(虚拟内存), free(空闲内存), buff(缓冲区), cache(缓存)
# swap: si(换入), so(换出)
# io: bi(块读入), bo(块写出)
# system: in(中断), cs(上下文切换)
# cpu: us(用户时间), sy(系统时间), id(空闲时间), wa(等待时间), st(被偷时间)
3. 磁盘I/O监控
iostat - I/O统计
# 安装sysstat包
sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL
iostat # 显示I/O统计
iostat -x # 扩展统计
iostat -x 5 # 每5秒显示一次
iostat -x 5 10 # 每5秒显示一次,共10次
# 重要指标
# %util: 设备利用率
# await: 平均等待时间
# svctm: 平均服务时间
# r/s, w/s: 每秒读写次数
# rkB/s, wkB/s: 每秒读写KB数
iotop - 实时I/O监控
# 安装iotop
sudo apt install iotop # Ubuntu/Debian
sudo yum install iotop # CentOS/RHEL
sudo iotop # 启动iotop
sudo iotop -o # 只显示有I/O活动的进程
sudo iotop -a # 显示累积I/O
4. 网络监控
netstat - 网络连接统计
netstat -tuln # 显示监听端口
netstat -tupln # 显示进程信息
netstat -i # 显示网络接口统计
netstat -s # 显示网络统计
# 连接状态统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ss - 现代网络统计工具
ss -tuln # 显示监听端口
ss -tupln # 显示进程信息
ss -s # 显示统计摘要
ss -i # 显示内部TCP信息
iftop - 实时网络流量监控
# 安装iftop
sudo apt install iftop # Ubuntu/Debian
sudo yum install iftop # CentOS/RHEL
sudo iftop # 监控默认接口
sudo iftop -i eth0 # 监控特定接口
sudo iftop -n # 不解析主机名
高级监控工具
1. sar - 系统活动报告
sar基本使用
# CPU使用率
sar -u 5 10 # 每5秒显示CPU使用率,共10次
sar -u # 显示今天的CPU使用率
# 内存使用率
sar -r 5 10 # 内存使用统计
sar -S 5 10 # 交换空间统计
# I/O统计
sar -b 5 10 # 块设备I/O统计
sar -d 5 10 # 磁盘I/O统计
# 网络统计
sar -n DEV 5 10 # 网络设备统计
sar -n TCP 5 10 # TCP统计
# 查看历史数据
sar -u -f /var/log/sysstat/saXX # 查看特定日期的数据
2. dstat - 多功能系统监控
dstat使用
# 安装dstat
sudo apt install dstat # Ubuntu/Debian
sudo yum install dstat # CentOS/RHEL
dstat # 基本监控
dstat -cdngy # CPU、磁盘、网络、内存、系统
dstat -c -m -d -n 5 # 每5秒显示CPU、内存、磁盘、网络
dstat --top-cpu --top-mem # 显示CPU和内存使用最高的进程
3. nmon - 性能监控工具
nmon使用
# 安装nmon
sudo apt install nmon # Ubuntu/Debian
sudo yum install nmon # CentOS/RHEL
nmon # 启动nmon
# nmon交互命令
c # CPU使用率
m # 内存使用率
d # 磁盘I/O
n # 网络统计
t # 进程信息
q # 退出
性能分析和调优
1. CPU性能分析
CPU使用率分析
# 查看CPU详细信息
cat /proc/cpuinfo
lscpu
# 实时CPU监控
top -1 # 显示每个CPU核心
mpstat 5 # 每5秒显示CPU统计
mpstat -P ALL 5 # 显示所有CPU核心统计
# CPU密集型进程识别
ps aux --sort=-%cpu | head -10
top -o %CPU
CPU调优技巧
# 进程优先级调整
nice -n 10 command # 以低优先级启动命令
renice 10 PID # 调整运行中进程优先级
# CPU亲和性设置
taskset -c 0,1 command # 绑定进程到CPU 0和1
taskset -p 0x3 PID # 设置进程CPU亲和性
# 查看进程CPU亲和性
taskset -p PID
2. 内存性能分析
内存使用分析
# 详细内存信息
cat /proc/meminfo
# 进程内存使用
ps aux --sort=-%mem | head -10
pmap PID # 查看进程内存映射
cat /proc/PID/status # 进程内存状态
cat /proc/PID/smaps # 详细内存映射
# 内存泄漏检测
valgrind --tool=memcheck --leak-check=full ./program
内存调优
# 调整交换空间使用
echo 10 | sudo tee /proc/sys/vm/swappiness # 减少swap使用
# 清理缓存
echo 1 | sudo tee /proc/sys/vm/drop_caches # 清理页缓存
echo 2 | sudo tee /proc/sys/vm/drop_caches # 清理目录项和inode缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches # 清理所有缓存
# 内存压缩
echo 1 | sudo tee /sys/block/zram0/reset # 重置zram设备
3. 磁盘I/O性能分析
I/O性能测试
# 磁盘读写性能测试
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct # 写测试
dd if=testfile of=/dev/null bs=1G count=1 iflag=direct # 读测试
# 随机I/O测试
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --size=4g --numjobs=1 --iodepth=1 --runtime=60 --time_based --end_fsync=1
# 磁盘延迟测试
ioping -c 10 /tmp/ # 测试目录延迟
I/O调优
# 调整I/O调度器
echo deadline | sudo tee /sys/block/sda/queue/scheduler
echo noop | sudo tee /sys/block/sda/queue/scheduler
# 调整读取预读
echo 4096 | sudo tee /sys/block/sda/queue/read_ahead_kb
# 文件系统挂载优化
mount -o noatime,nodiratime /dev/sda1 /mnt # 禁用访问时间更新
4. 网络性能分析
网络性能测试
# 带宽测试
iperf3 -s # 服务器模式
iperf3 -c server_ip # 客户端模式
# 网络延迟测试
ping -c 100 google.com
mtr google.com # 路由跟踪
# 网络吞吐量测试
wget -O /dev/null http://speedtest.example.com/file.zip
curl -o /dev/null http://speedtest.example.com/file.zip
网络调优
# TCP参数调优
echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_rmem = 4096 87380 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_wmem = 4096 65536 16777216' >> /etc/sysctl.conf
# 应用设置
sysctl -p
系统调优实践
1. 内核参数调优
常用内核参数
# 创建调优配置文件
sudo tee /etc/sysctl.d/99-performance.conf << EOF
# 网络优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_congestion_control = bbr
# 文件系统优化
fs.file-max = 2097152
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# 进程优化
kernel.pid_max = 4194304
EOF
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-performance.conf
2. 服务优化
系统服务优化
# 禁用不必要的服务
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon
# 查看启动时间
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
3. 监控脚本
性能监控脚本
#!/bin/bash
# 系统性能监控脚本
LOG_FILE="/var/log/performance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
# 内存使用率
MEM_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
# 磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
# 系统负载
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | cut -d',' -f1)
# 记录到日志
echo "[$DATE] CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%, DISK: ${DISK_USAGE}%, LOAD: $LOAD_AVG" >> $LOG_FILE
# 告警检查
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "[$DATE] WARNING: High CPU usage: ${CPU_USAGE}%" >> $LOG_FILE
fi
if (( $(echo "$MEM_USAGE > 85" | bc -l) )); then
echo "[$DATE] WARNING: High memory usage: ${MEM_USAGE}%" >> $LOG_FILE
fi
if [ "$DISK_USAGE" -gt 90 ]; then
echo "[$DATE] WARNING: High disk usage: ${DISK_USAGE}%" >> $LOG_FILE
fi
性能基准测试
1. CPU基准测试
sysbench CPU测试
# 安装sysbench
sudo apt install sysbench # Ubuntu/Debian
sudo yum install sysbench # CentOS/RHEL
# CPU测试
sysbench cpu --cpu-max-prime=20000 run
sysbench cpu --threads=4 --cpu-max-prime=20000 run
2. 内存基准测试
内存带宽测试
# sysbench内存测试
sysbench memory --memory-total-size=10G run
# 使用mbw测试内存带宽
sudo apt install mbw
mbw 1024 # 测试1GB内存带宽
3. 磁盘基准测试
磁盘性能测试
# sysbench磁盘测试
sysbench fileio --file-total-size=10G prepare
sysbench fileio --file-total-size=10G --file-test-mode=rndrw run
sysbench fileio --file-total-size=10G cleanup
# hdparm测试
sudo hdparm -tT /dev/sda # 测试磁盘读取速度
总结
系统监控与性能调优要点:
- 监控工具:熟练使用top、htop、iostat、sar等监控工具
- 性能指标:理解CPU、内存、磁盘、网络性能指标
- 瓶颈识别:快速识别系统性能瓶颈
- 调优技巧:掌握内核参数、进程优先级等调优方法
- 基准测试:建立性能基准,量化优化效果
- 监控自动化:编写监控脚本,实现自动化监控
下一课预告
在下一课中,我们将学习Shell脚本编程,包括:
- Shell脚本基础语法
- 变量和函数使用
- 条件判断和循环
- 实用脚本编写
💡 小贴士:系统性能监控是运维工作的重要组成部分。建议建立定期监控机制,及时发现和解决性能问题,保证系统稳定运行。
📚 文章对你有帮助?请关注我的公众号,万分感谢!
获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号
第一时间获取最新技术文章

添加微信
技术交流 · 问题答疑 · 学习指导
评论讨论
欢迎留下你的想法和建议