内容大纲
内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
1. 系统性能分析概述
系统性能分析是通过分析CPU、内存、磁盘I/O、网络等系统资源,找出性能瓶颈的过程。
学习交流加群风哥微信: itpux-com
# CPU性能分析:分析CPU使用率、上下文切换
# 内存性能分析:分析内存使用、交换、缓存
# 磁盘I/O性能分析:分析磁盘I/O、磁盘使用率
# 网络性能分析:分析网络流量、网络错误
# 进程性能分析:分析进程CPU、内存使用
# 系统瓶颈分析:找出系统性能瓶颈
2. CPU性能分析
风哥提示:
分析CPU性能找出瓶颈。
# 1. 使用top分析CPU
[root@localhost ~]# top -bn1 | head -20
top – 10:00:00 up 1 day, 2:30, 4 users, load average: 0.10, 0.15, 0.12
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.5 us, 1.0 sy, 0.0 ni, 96.0 id, 0.5 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 8192.0 total, 4096.0 free, 2048.0 used, 2048.0 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 8192.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 123456 10240 4096 S 2.5 0.1 0:00.05 systemd
2345 root 20 0 65536 5120 2048 S 1.0 0.1 0:00.03 kworker/u4:0
3456 mysql 20 0 2097152 524288 102400 S 0.5 6.3 1:23.45 mysqld
4567 nginx 20 0 262144 51200 20480 S 0.3 0.6 0:12.34 nginx
5678 root 20 0 131072 10240 4096 R 0.2 0.1 0:00.01 top
# 2. 使用vmstat分析CPU
[root@localhost ~]# vmstat 1 3
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 12 25 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 11 22 2 1 96 1 0
# 3. 使用mpstat分析CPU
[root@localhost ~]# mpstat -P ALL 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:00:01 AM all 2.50 0.00 1.00 0.50 0.00 0.00 0.00 0.00 0.00 96.00
10:00:01 AM 0 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
10:00:01 AM 1 3.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00
10:00:01 AM 2 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
10:00:01 AM 3 3.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00
# 4. 使用pidstat分析进程CPU
[root@localhost ~]# pidstat -p ALL 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM UID PID %usr %system %guest %wait %CPU CPU Command
10:00:01 AM 0 1 0.00 0.00 0.00 0.00 0.00 0.00 systemd
10:00:01 AM 0 123 0.00 0.00 0.00 0.00 0.00 0.00 kworker/0:0H
10:00:01 AM 0 3456 0.50 0.00 0.00 0.00 0.50 0.00 mysqld
# 5. 分析CPU瓶颈
# 如果us(用户空间CPU时间)过高,说明应用程序CPU占用高
# 如果sy(内核空间CPU时间)过高,说明系统调用过多
# 如果wa(等待I/O的CPU时间)过高,说明I/O等待时间长
# 如果id(空闲CPU时间)过低,说明CPU负载高
3. 内存性能分析
分析内存性能找出瓶颈。
# 1. 使用free分析内存
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 7.6Gi 2.0Gi 4.0Gi 100Mi 1.6Gi 5.3Gi
Swap: 4.0Gi 0B 4.0Gi
# 2. 使用vmstat分析内存
[root@localhost ~]# vmstat -s
8589934592 total memory
4294967296 used memory
4294967296 active memory
2147483648 inactive memory
4294967296 free memory
104857600 buffer memory
2147483648 swap cache
4294967296 total swap
0 used swap
4294967296 free swap
# 3. 使用sar分析内存
[root@localhost ~]# sar -r 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:00:01 AM 4096000 4096000 50.00 102400 2048000 512000 6.25 2048000 2048000 0
10:00:02 AM 4096000 4096000 50.00 102400 2048000 512000 6.25 2048000 2048000 0
10:00:03 AM 4096000 4096000 50.00 102400 2048000 512000 6.25 2048000 2048000 0
Average: 4096000 4096000 50.00 102400 2048000 512000 6.25 2048000 2048000 0
# 4. 使用pidstat分析进程内存
[root@localhost ~]# pidstat -r 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM UID PID minflt/s majflt/s VSZ RSS %MEM Command
10:00:01 AM 0 3456 0.00 0.00 2097152 524288 6.25 mysqld
10:00:02 AM 0 3456 0.00 0.00 2097152 524288 6.25 mysqld
10:00:03 AM 0 3456 0.00 0.00 2097152 524288 6.25 mysqld
Average: 0 3456 0.00 0.00 2097152 524288 6.25 mysqld
# 5. 分析内存瓶颈
# 如果memused(内存使用率)过高,说明内存不足
# 如果swap(交换使用)过高,说明需要增加内存或优化内存使用
# 如果cache(缓存)过高,说明缓存占用过多内存
# 如果kbdirty(脏页)过高,说明磁盘写入压力大
4. 磁盘I/O性能分析
学习交流加群风哥QQ113257174
分析磁盘I/O性能找出瓶颈。
# 1. 使用iostat分析磁盘I/O
[root@localhost ~]# iostat -x 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.50 0.00 1.00 0.50 0.00 96.00
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.50 0.50 5.00 2.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
sdb 1.00 1.00 10.00 5.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
sdc 1.50 1.50 15.00 7.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10.00 5.00 0.00 0.00
# 2. 使用iotop分析磁盘I/O
[root@localhost ~]# iotop -o
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1234 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd
2345 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % kworker/u4:0
3456 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 0.00 % mysqld
4567 be/4 nginx 0.00 B/s 0.00 B/s 0.00 % 0.00 % nginx
# 3. 使用pidstat分析进程I/O
[root@localhost ~]# pidstat -d 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
10:00:01 AM 0 3456 0.00 0.00 0.00 mysqld
10:00:02 AM 0 3456 0.00 0.00 0.00 mysqld
10:00:03 AM 0 3456 0.00 0.00 0.00 mysqld
Average: 0 3456 0.00 0.00 0.00 mysqld
# 4. 分析磁盘I/O瓶颈
# 如果%util(设备利用率)过高,说明磁盘I/O压力大
# 如果await(等待时间)过长,说明I/O响应慢
# 如果aqu-sz(平均队列长度)过长,说明I/O队列堆积
# 如果r/s、w/s(读写速率)过高,说明磁盘I/O频繁
5. 网络性能分析
分析网络性能找出瓶颈。
更多视频教程www.fgedu.net.cn
# 1. 使用sar分析网络
[root@localhost ~]# sar -n DEV 1 3
Linux 5.14.0-362.el9.x86_64 (localhost.localdomain) 04/03/2026 _x86_64_ (4 CPU)
10:00:00 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
10:00:01 AM eth0 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.10
10:00:01 AM lo 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.00
10:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
10:00:02 AM eth0 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.10
10:00:02 AM lo 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.00
10:00:02 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
10:00:03 AM eth0 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.10
10:00:03 AM lo 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.00
Average: eth0 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.10
Average: lo 100.00 50.00 10.00 5.00 0.00 0.00 0.00 0.00
# 2. 使用iftop分析网络
[root@localhost ~]# iftop -i eth0
# iftop启动后,显示网络流量信息
# 3. 使用nethogs分析网络
[root@localhost ~]# nethogs eth0
# nethogs启动后,显示进程网络流量
# 4. 分析网络瓶颈
# 如果%ifutil(接口利用率)过高,说明网络带宽压力大
# 如果rxpck/s、txpck/s(收发包速率)过高,说明网络包处理压力大
# 如果rxkB/s、txkB/s(收发速率)过高,说明网络流量大
# 如果rxcmp/s、txcmp/s(压缩包速率)过高,说明网络压缩包多
6. 实战案例
系统性能分析实战案例。
# 1. 创建性能分析脚本
[root@localhost ~]# cat > /usr/local/bin/performance-analysis.sh << 'EOF'
#!/bin/bash
# script.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 性能分析脚本
LOG_FILE="/var/log/performance-analysis.log"
REPORT_FILE="/var/log/performance-report.txt"
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 分析CPU性能
analyze_cpu() {
log “Analyzing CPU performance…”
echo “=== CPU Performance Analysis ===” >> $REPORT_FILE
echo “” >> $REPORT_FILE
# CPU使用率
CPU_USAGE=$(top -bn1 | grep “Cpu(s)” | awk ‘{print $2}’ | sed ‘s/us,//’)
echo “CPU Usage: ${CPU_USAGE}%” >> $REPORT_FILE
# 负载平均值
LOAD_AVG=$(uptime | awk -F’load average:’ ‘{print $2}’)
echo “Load Average:${LOAD_AVG}” >> $REPORT_FILE
# 上下文切换
CONTEXT_SWITCHES=$(vmstat 1 2 | tail -1 | awk ‘{print $12}’)
echo “Context Switches: ${CONTEXT_SWITCHES}” >> $REPORT_FILE
echo “” >> $REPORT_FILE
}
# 分析内存性能
analyze_memory() {
log “Analyzing memory performance…”
echo “=== Memory Performance Analysis ===” >> $REPORT_FILE
echo “” >> $REPORT_FILE
# 内存使用率
MEMORY_USAGE=$(free | grep Mem | awk ‘{printf(“%.0f”), $3/$2 * 100.0}’)
echo “Memory Usage: ${MEMORY_USAGE}%” >> $REPORT_FILE
# 交换使用率
SWAP_USAGE=$(free | grep Swap | awk ‘{printf(“%.0f”), $3/$2 * 100.0}’)
echo “Swap Usage: ${SWAP_USAGE}%” >> $REPORT_FILE
# 缓存使用
CACHE_USAGE=$(free | grep Mem | awk ‘{print $6}’)
echo “Cache Usage: ${CACHE_USAGE} KB” >> $REPORT_FILE
echo “” >> $REPORT_FILE
}
# 分析磁盘I/O性能
analyze_disk() {
log “Analyzing disk I/O performance…”
echo “=== Disk I/O Performance Analysis ===” >> $REPORT_FILE
echo “” >> $REPORT_FILE
# 磁盘利用率
DISK_UTIL=$(iostat -x 1 2 | grep sda | tail -1 | awk ‘{print $14}’)
echo “Disk Utilization: ${DISK_UTIL}%” >> $REPORT_FILE
# I/O等待时间
IO_WAIT=$(iostat -x 1 2 | grep sda | tail -1 | awk ‘{print $10}’)
echo “I/O Wait: ${IO_WAIT} ms” >> $REPORT_FILE
# 队列长度
QUEUE_LENGTH=$(iostat -x 1 2 | grep sda | tail -1 | awk ‘{print $11}’)
echo “Queue Length: ${QUEUE_LENGTH}” >> $REPORT_FILE
echo “” >> $REPORT_FILE
}
# 分析网络性能
analyze_network() {
log “Analyzing network performance…”
echo “=== Network Performance Analysis ===” >> $REPORT_FILE
echo “” >> $REPORT_FILE
# 网络接口利用率
NET_UTIL=$(sar -n DEV 1 2 | grep eth0 | tail -1 | awk ‘{print $8}’)
echo “Network Utilization: ${NET_UTIL}%” >> $REPORT_FILE
# 网络流量
NET_RX=$(sar -n DEV 1 2 | grep eth0 | tail -1 | awk ‘{print $5}’)
NET_TX=$(sar -n DEV 1 2 | grep eth0 | tail -1 | awk ‘{print $6}’)
echo “Network RX: ${NET_RX} KB/s” >> $REPORT_FILE
echo “Network TX: ${NET_TX} KB/s” >> $REPORT_FILE
echo “” >> $REPORT_FILE
}
# 主函数
main() {
log “Starting performance analysis…”
# 清空报告文件
> $REPORT_FILE
# 分析各项性能
analyze_cpu
analyze_memory
analyze_disk
analyze_network
log “Performance analysis completed. Report saved to $REPORT_FILE”
}
# 执行主函数
main
EOF
# 2. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/performance-analysis.sh
# 3. 创建日志文件
[root@localhost ~]# touch /var/log/performance-analysis.log
[root@localhost ~]# chmod 644 /var/log/performance-analysis.log
# 4. 配置定时任务
[root@localhost ~]# echo “0 */1 * * * root /usr/local/bin/performance-analysis.sh” > /etc/cron.d/performance-analysis
# 5. 重启cron服务
[root@localhost ~]# systemctl restart crond
# 6. 测试分析脚本
[root@localhost ~]# /usr/local/bin/performance-analysis.sh
# 7. 查看报告
[root@localhost ~]# cat /var/log/performance-report.txt
=== CPU Performance Analysis ===
CPU Usage: 2.5%
Load Average: 0.10, 0.15, 0.12
Context Switches: 20
=== Memory Performance Analysis ===
Memory Usage: 50%
Swap Usage: 0%
Cache Usage: 2048000 KB
=== Disk I/O Performance Analysis ===
Disk Utilization: 0.00%
I/O Wait: 0.00 ms
Queue Length: 0.00
=== Network Performance Analysis ===
Network Utilization: 0.10%
Network RX: 10.00 KB/s
Network TX: 5.00 KB/s
# 8. 查看日志
[root@localhost ~]# tail -f /var/log/performance-analysis.log
[2026-04-03 10:00:00] Starting performance analysis…
[2026-04-03 10:00:01] Analyzing CPU performance…
[2026-04-03 10:00:02] Analyzing memory performance…
[2026-04-03 10:00:03] Analyzing disk I/O performance…
[2026-04-03 10:00:04] Analyzing network performance…
[2026-04-03 10:00:05] Performance analysis completed. Report saved to /var/log/performance-report.txt
提示<
from PG视频:www.itpux.com
/h3>
系统性能分析需要综合分析CPU、内存、磁盘I/O、网络等各个方面。建议定期进行性能分析,及时发现性能瓶颈。对于性能瓶颈,需要针对性地进行调优。<
更多学习教程公众号风哥教程itpux_com
/p>
