2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
浏览量:29 次 发布时间:2026-01-21 18:36 作者:明扬工控商城 下载docx
2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
好的,我们继续第十一课。今天学习Linux性能监控和优化,这是系统管理员必备的核心技能。
第一部分:性能监控基础
1.1 系统整体性能指标
bash
# 查看系统负载(1分钟、5分钟、15分钟平均负载)
uptime
# 查看系统版本和内核信息
uname -a
lsb_release -a
# 查看CPU信息
lscpu
cat /proc/cpuinfo
# 查看内存信息
free -h
cat /proc/meminfo
# 查看磁盘信息
df -h
lsblk
1.2 top命令详解
bash
# 启动top
top
# top界面详解:
# 第一行:系统时间、运行时间、登录用户数、系统负载
# 第二行:任务总数(运行、睡眠、停止、僵尸)
# 第三行:CPU使用率(us用户,sy系统,ni优先级,id空闲,wa等待,hi硬件中断,si软件中断,st被偷走)
# 第四行:内存使用(总量、使用、空闲、缓存)
# 第五行:交换空间(总量、使用、空闲)
# top交互命令:
# 1. 按`1`:显示所有CPU核心的使用情况
# 2. 按`M`:按内存使用排序
# 3. 按`P`:按CPU使用排序
# 4. 按`T`:按运行时间排序
# 5. 按`c`:显示完整命令路径
# 6. 按`k`:结束进程
# 7. 按`z`:彩色显示
# 8. 按`W`:保存当前配置
# 9. 按`q`:退出
# 批处理模式(用于脚本)
top -b -n 1 > top_output.txt
1.3 htop命令(增强版top)
bash
# 安装htop
sudo apt install htop
# 使用htop
htop
# htop优势:
# 1. 彩色界面,更直观
# 2. 支持鼠标操作
# 3. 可以垂直和水平滚动
# 4. 更容易管理进程(F2设置,F3搜索,F9杀死进程)
# 按F10退出htop
第二部分:CPU性能监控
2.1 实时CPU监控
bash
# 使用mpstat查看CPU统计(需要安装sysstat)
sudo apt install sysstat
mpstat -P ALL 1 # 每秒刷新一次,显示所有CPU
# 查看CPU使用率最高的进程
ps aux --sort=-%cpu | head -10
# 查看特定进程的CPU使用
pidstat -p [PID] 1 # 每秒显示一次
# 按CPU使用率排序并显示前10个进程
ps -eo pid,comm,%cpu --sort=-%cpu | head -10
# 查看每个CPU核心的使用情况
sar -P ALL 1 3 # 每秒采样,采样3次
2.2 CPU性能分析工具
bash
# 使用perf进行性能分析
sudo apt install linux-tools-common linux-tools-$(uname -r)
# 统计CPU事件
sudo perf stat ls
# 记录性能数据
sudo perf record -a -g sleep 10
# 生成报告
sudo perf report
# 火焰图生成工具(需要额外安装)
git clone https://github.com/brendangregg/FlameGraph
2.3 CPU压力测试
bash
# 安装压力测试工具
sudo apt install stress stress-ng
# 对CPU施加压力(4个核心,持续60秒)
stress --cpu 4 --timeout 60
# 使用stress-ng(更强大)
stress-ng --cpu 4 --cpu-method matrixprod --timeout 60
# 查看压力下的CPU使用率
watch -n 1 'mpstat -P ALL'
第三部分:内存性能监控
3.1 内存使用情况监控
bash
# 查看内存使用情况
free -h
free -m # 以MB显示
# 持续监控内存变化
watch -n 1 free -h
# 查看内存详细信息
cat /proc/meminfo
# 查看内存使用最多的进程
ps aux --sort=-%mem | head -10
# 查看每个进程的内存使用
top -o %MEM
# 使用smem查看内存使用(更详细)
sudo apt install smem
smem -t -k # 以KB显示并统计
smem -p # 以百分比显示
3.2 虚拟内存和交换空间
bash
# 查看交换空间使用
swapon --show
cat /proc/swaps
# 查看页面缓存
cat /proc/meminfo | grep -E "(Cached|Buffers|Dirty|Writeback)"
# 查看内存页面活动
vmstat 1 5 # 每秒采样,采样5次
# 查看内存统计信息
sar -r 1 3 # 每秒采样内存使用,采样3次
# 查看大页内存
cat /proc/meminfo | grep -i huge
3.3 内存泄漏检测
bash
# 使用valgrind检测内存泄漏(需要安装)
sudo apt install valgrind
# 检测C程序内存泄漏
valgrind --leak-check=full ./your_program
# 使用ps查看进程内存增长
watch -n 1 'ps aux | grep your_program'
# 监控进程的内存使用
pidstat -r -p [PID] 1
3.4 内存压力测试
bash
# 测试内存
stress --vm 2 --vm-bytes 1G --timeout 30s
# 更复杂的内存测试
stress-ng --vm 2 --vm-bytes 1G --vm-method all --timeout 60s
# 监控内存压力下的表现
watch -n 1 'free -h; echo; ps aux --sort=-%mem | head -5'
第四部分:磁盘I/O性能监控
4.1 磁盘使用情况
bash
# 查看磁盘空间使用
df -h
df -i # 查看inode使用
# 查看目录大小
du -sh /home/*
du -ah /home | sort -rh | head -20
# 查看磁盘分区信息
lsblk
lsblk -f # 显示文件系统
# 查看磁盘详细信息
sudo fdisk -l
sudo parted -l
4.2 磁盘I/O性能监控
bash
# 使用iostat查看磁盘I/O
iostat -x 1 # 每秒刷新,显示扩展信息
# 查看特定磁盘的I/O
iostat -dx /dev/sda 1
# 使用iotop查看磁盘I/O进程
sudo apt install iotop
sudo iotop
# 使用vmstat查看I/O统计
vmstat -d # 显示磁盘统计
# 使用sar查看磁盘活动
sar -d 1 3 # 每秒采样,采样3次
4.3 磁盘性能测试
bash
# 使用dd测试磁盘写入速度
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct conv=fdatasync
# 测试磁盘读取速度
dd if=/tmp/testfile of=/dev/null bs=1G
# 使用hdparm测试磁盘性能
sudo hdparm -tT /dev/sda
# 使用fio进行专业磁盘测试
sudo apt install fio
# 随机读写测试
fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting
4.4 找出磁盘I/O瓶颈
bash
# 查看等待I/O的进程
sudo iotop -o
# 查看磁盘使用率
iostat -x 1 | grep -A 1 "%util"
# 找出哪个进程在大量写盘
sudo lsof | grep deleted # 查看已删除但仍被进程占用的文件
# 监控文件系统活动
sudo apt install fatrace
sudo fatrace | grep -E "(write|open)" | head -20
第五部分:网络性能监控
5.1 网络接口监控
bash
# 查看网络接口统计
ip -s link
ifconfig -a
# 查看网络带宽使用
sudo apt install iftop
sudo iftop
# 实时查看网络流量
nload
sudo apt install nload
# 查看网络连接
ss -tulnp
netstat -tulnp
# 查看网络统计
netstat -s
5.2 网络性能测试
bash
# 测试网络延迟
ping -c 10 google.com
# 测试网络路径
traceroute google.com
mtr google.com
# 测试带宽
sudo apt install iperf3
# 服务器端:iperf3 -s
# 客户端:iperf3 -c 服务器IP
# 测试下载速度
wget -O /dev/null http://speedtest.tele2.net/100MB.zip
# 使用speedtest-cli
sudo apt install speedtest-cli
speedtest-cli
5.3 找出网络瓶颈
bash
# 查看网络连接状态
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
# 查看网络错误统计
netstat -i
# 监控网络错误
watch -n 1 'netstat -i | grep -E "(Iface|eth0|ens)"'
# 查看网络队列长度
tc -s qdisc show dev eth0
# 查看网络丢包
sar -n EDEV 1 3
第六部分:进程和系统调用监控
6.1 进程详细监控
bash
# 查看进程状态
ps auxf
# 查看进程树
pstree -p
pstree -ap
# 查看进程打开的文件
sudo lsof -p [PID]
# 查看进程的系统调用
strace -p [PID]
# 查看进程的内存映射
pmap -x [PID]
# 查看进程的CPU和内存使用
pidstat 1 # 每秒刷新
6.2 系统调用监控
bash
# 跟踪进程的系统调用
strace -c ls # 统计系统调用
strace -tt -T ls # 显示时间戳和耗时
# 使用perf跟踪系统调用
sudo perf trace ls
# 使用sysdig(需要安装)
sudo apt install sysdig
sudo sysdig -c top_syscalls
6.3 性能分析工具
bash
# 使用sysstat收集系统性能数据
sar -A # 显示所有统计
# 查看历史性能数据
sar -f /var/log/sysstat/saXX # XX是日期
# 使用dstat(需要安装)
sudo apt install dstat
dstat -tcdngy # 显示CPU、磁盘、网络、内存、系统
# 使用atop(高级性能监控)
sudo apt install atop
atop
第七部分:系统优化技巧
7.1 CPU优化
bash
# 调整进程优先级
nice -n -10 important_process # 提高优先级
renice 10 -p [PID] # 调整运行中进程的优先级
# 设置CPU亲和性(将进程绑定到特定CPU)
taskset -c 0,1 ./program # 只在CPU0和CPU1上运行
# 查看中断分布
cat /proc/interrupts | grep -E "(CPU|eth)"
# 调整内核调度参数
sudo sysctl -w kernel.sched_min_granularity_ns=10000000
7.2 内存优化
bash
# 清理页面缓存(谨慎使用)
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 # 清理所有缓存
# 调整交换倾向
sudo sysctl -w vm.swappiness=10 # 降低交换倾向
# 调整虚拟内存参数
sudo vim /etc/sysctl.conf
# 添加:
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.vfs_cache_pressure = 1000
7.3 磁盘I/O优化
bash
# 调整I/O调度器
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 修改调度器
echo deadline | sudo tee /sys/block/sda/queue/scheduler
# 调整预读大小
sudo blockdev --setra 4096 /dev/sda
# 使用noatime挂载选项(减少写操作)
# 在/etc/fstab中添加noatime选项
7.4 网络优化
bash
# 调整TCP参数
sudo vim /etc/sysctl.conf
# 添加以下内容:
# 增大TCP缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 快速回收TIME_WAIT连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# 增大连接队列
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# 应用配置
sudo sysctl -p
第八部分:性能监控脚本
8.1 创建系统监控脚本
bash
vim system_monitor.sh
输入内容:
bash
#!/bin/bash
echo "====== 系统性能监控报告 ======"
echo "生成时间: $(date)"
echo ""
# CPU信息
echo "1. CPU信息:"
echo " 负载: $(uptime | awk -F'load average:' '{print $2}')"
echo " 核心数: $(nproc)"
echo " 使用率最高的5个进程:"
ps aux --sort=-%cpu | head -6 | awk '{printf " %-10s %-10s %-10s\n", $1, $3, $11}'
echo ""
# 内存信息
echo "2. 内存信息:"
free -h | awk '/Mem/ {printf " 总量: %s, 使用: %s, 空闲: %s, 缓存: %s\n", $2, $3, $4, $6}'
echo " 内存使用最高的5个进程:"
ps aux --sort=-%mem | head -6 | awk '{printf " %-10s %-10s %-10s\n", $1, $4, $11}'
echo ""
# 磁盘信息
echo "3. 磁盘信息:"
echo " 使用率超过80%的分区:"
df -h | awk 'NR>1 && $5+0 > 80 {print " " $1 ": " $5 " used"}'
echo ""
# 网络信息
echo "4. 网络连接:"
echo " TCP连接数: $(ss -t | wc -l)"
echo " ESTABLISHED连接: $(ss -t state established | wc -l)"
echo " LISTENING端口数: $(ss -tuln | grep LISTEN | wc -l)"
echo ""
# 系统日志
echo "5. 系统日志检查:"
echo " 最近5条错误日志:"
journalctl -p err -n 5 --no-pager 2>/dev/null || tail -5 /var/log/syslog | grep -i error
echo ""
echo "监控完成"
bash
chmod +x system_monitor.sh
./system_monitor.sh
8.2 实时监控面板
bash
vim realtime_monitor.sh
输入内容:
bash
#!/bin/bash
# 清屏
clear
while true; do
echo -e "\033[H" # 移动光标到左上角
echo "====== 实时系统监控 ======"
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# CPU负载
echo "CPU负载: $(uptime | awk -F'load average:' '{print $2}')"
# 内存使用
echo -n "内存使用: "
free -h | awk '/Mem/ {printf "%s/%s (%.1f%%)\n", $3, $2, $3/$2*100}'
# 磁盘使用
echo -n "根分区使用: "
df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}'
echo ""
echo "--- 进程监控 ---"
# CPU使用前5
echo "CPU使用前5:"
ps aux --sort=-%cpu | head -6 | tail -5 | awk '{printf "%-10s %-5s %-30s\n", $1, $3"%", $11}'
echo ""
# 内存使用前5
echo "内存使用前5:"
ps aux --sort=-%mem | head -6 | tail -5 | awk '{printf "%-10s %-5s %-30s\n", $1, $4"%", $11}'
echo ""
echo "按 Ctrl+C 退出"
# 刷新间隔
sleep 2
done
bash
chmod +x realtime_monitor.sh
./realtime_monitor.sh
第九部分:性能基准测试
9.1 综合性能测试
bash
# 使用sysbench进行全面测试
sudo apt install sysbench
# CPU测试
sysbench cpu --threads=4 run
# 内存测试
sysbench memory --threads=4 run
# 磁盘I/O测试
sysbench fileio --file-total-size=2G prepare
sysbench fileio --file-total-size=2G --file-test-mode=rndrw --time=60 --max-requests=0 run
sysbench fileio --file-total-size=2G cleanup
# 数据库性能测试(需要先安装MySQL)
sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql prepare
sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=4 run
9.2 压力测试和稳定性测试
bash
# 使用stress进行系统压力测试
stress --cpu 4 --io 2 --vm 2 --vm-bytes 1G --timeout 300s
# 监控压力测试期间的系统表现
watch -n 1 'uptime; free -h; df -h /; echo; mpstat -P ALL 1 1 | tail -5'
# 使用stress-ng进行更全面的测试
stress-ng --cpu 4 --cpu-method all --io 4 --vm 2 --vm-bytes 1G --timeout 300s --metrics-brief
第十部分:性能问题排查流程
10.1 性能问题诊断步骤
bash
# 第一步:检查系统整体状态
uptime
dmesg | tail
vmstat 1 5
mpstat -P ALL 1 5
pidstat 1 5
# 第二步:检查CPU
top -b -n 1 | head -20
ps aux --sort=-%cpu | head -10
# 第三步:检查内存
free -h
ps aux --sort=-%mem | head -10
# 第四步:检查磁盘
df -h
iostat -xz 1 5
# 第五步:检查网络
netstat -s
ss -s
# 第六步:检查特定进程
strace -p [PID]
perf top -p [PID]
10.2 常见性能问题解决方案
bash
# 问题1:CPU使用率过高
# 解决方案:
# 1. 找出占用CPU的进程
ps aux --sort=-%cpu | head -10
# 2. 分析进程的CPU使用模式
perf top -p [PID]
# 3. 优化程序代码或调整配置
# 问题2:内存不足
# 解决方案:
# 1. 找出内存泄漏
valgrind --leak-check=full ./program
# 2. 增加交换空间
sudo fallocate -l 2G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 3. 调整内存参数
sudo sysctl -w vm.swappiness=10
# 问题3:磁盘I/O瓶颈
# 解决方案:
# 1. 找出高I/O进程
sudo iotop -o
# 2. 优化磁盘调度器
echo deadline | sudo tee /sys/block/sda/queue/scheduler
# 3. 考虑使用SSD或RAID
第十一部分:练习任务
练习1:创建完整的性能监控系统
编写一个脚本,收集以下信息:
CPU使用率和负载
内存使用情况
磁盘使用和I/O
网络连接状态
将数据保存到日志文件
设置定时任务,每小时运行一次
添加报警功能(当CPU>90%或内存>90%时发送通知)
练习2:性能基准测试
使用sysbench对系统进行基准测试
记录测试结果
对比优化前后的性能差异
练习3:性能问题排查实战
使用stress工具制造CPU、内存、I/O压力
练习使用各种监控工具定位问题
尝试优化系统参数缓解问题
练习4:创建实时监控面板
使用Python或Shell脚本创建实时监控界面
显示关键性能指标
添加颜色编码(绿色正常,黄色警告,红色危险)
今日总结
今天我们学习了:
性能监控基础:系统整体状态查看
CPU监控:使用top、htop、mpstat等工具
内存监控:内存使用、泄漏检测、优化
磁盘I/O监控:I/O性能测试和优化
网络性能监控:带宽测试和优化
进程监控:进程详细分析和系统调用跟踪
系统优化:CPU、内存、磁盘、网络优化技巧
性能基准测试:使用sysbench进行综合测试
问题排查:性能问题诊断流程和解决方案
性能优化黄金法则:
先监控,再优化
先定位瓶颈,再针对性优化
一次只改变一个变量
测试优化效果,记录基准数据
考虑成本和收益的平衡
性能优化是一个持续的过程,需要定期监控和调整。建议在生产环境变更前先在测试环境验证。
有问题吗?完成练习后,我们可以继续第十二课:Shell脚本进阶和自动化。
将本文的Word文档下载到电脑
推荐度: