1. 首页 > IT综合教程 > 正文

IT教程FG419-系统运维性能调优

内容大纲

1. 系统运维性能调优概述

系统运维性能调优是保障IT系统高效运行的关键工作,它通过分析系统性能瓶颈,优化系统配置和资源使用,提高系统的响应速度和处理能力。性能调优需要覆盖CPU、内存、磁盘I/O、网络等多个层面,建立完善的监控和优化机制。

系统运维性能调优的核心目标包括:

  • 提高系统响应速度和吞吐量
  • 降低系统资源使用率
  • 消除性能瓶颈和故障点
  • 提升用户体验和满意度
  • 降低运维成本和资源浪费
  • 确保系统稳定可靠运行

更多学习教程www.fgedu.net.cn

2. CPU性能调优

2.1 CPU性能分析

# CPU性能分析脚本
$ cat > /usr/local/bin/cpu_analysis.sh << 'EOF' #!/bin/bash echo "开始CPU性能分析..." # 1. 查看CPU基本信息 echo "=== CPU基本信息 ===" lscpu # 2. 查看CPU使用率 echo -e "\n=== CPU使用率 ===" top -bn1 | head -20 # 3. 查看CPU负载 echo -e "\n=== CPU负载 ===" uptime # 4. 查看进程CPU使用 echo -e "\n=== 进程CPU使用TOP10 ===" ps aux --sort=-%cpu | head -11 # 5. 查看CPU上下文切换 echo -e "\n=== CPU上下文切换 ===" vmstat 1 5 # 6. 查看CPU中断 echo -e "\n=== CPU中断统计 ===" cat /proc/interrupts | head -20 # 7. 查看CPU频率 echo -e "\n=== CPU频率 ===" cat /proc/cpuinfo | grep "MHz" | head -5 echo "CPU性能分析完成" EOF $ chmod +x /usr/local/bin/cpu_analysis.sh
输出结果如下:
开始CPU性能分析…
=== CPU基本信息 ===
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

=== CPU使用率 ===
top – 10:30:45 up 30 days, 5:23, 2 users, load average: 2.50, 2.30, 2.10
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.5 us, 5.2 sy, 0.0 ni, 68.8 id, 0.5 wa, 0.0 hi, 0.0 si

=== CPU负载 ===
10:30:45 up 30 days, 5:23, 2 users, load average: 2.50, 2.30, 2.10

=== 进程CPU使用TOP10 ===
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1234 45.2 15.5 1234567 524288 ? Sl Apr01 123:45 /usr/sbin/mysqld
nginx 2345 12.3 2.1 123456 54321 ? S Apr02 45:12 nginx: worker process
java 3456 8.5 10.2 2345678 345678 ? Sl Apr03 12:34 /usr/bin/java

=== CPU上下文切换 ===
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 123456 12345 234567 0 0 12 45 123 456 25 5 69 1 0
1 0 0 123456 12345 234567 0 0 10 40 120 450 24 5 70 1 0

=== CPU中断统计 ===
CPU0 CPU1 CPU2 CPU3
0: 12 0 0 0 IO-APIC-edge timer
1: 5 0 0 0 IO-APIC-edge i8042
8: 1 0 0 0 IO-APIC-edge rtc0

=== CPU频率 ===
cpu MHz : 2400.000
cpu MHz : 2400.000
cpu MHz : 2400.000
cpu MHz : 2400.000
cpu MHz : 2400.000
CPU性能分析完成

2.2 CPU性能优化

# CPU性能优化脚本
$ cat > /usr/local/bin/cpu_optimization.sh << 'EOF' #!/bin/bash echo "开始CPU性能优化..." # 1. 设置CPU性能模式 echo "设置CPU性能模式..." for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > $cpu
done

# 2. 设置CPU亲和性
echo “设置CPU亲和性…”
# 将MySQL绑定到CPU 0-3
taskset -pc 0-3 $(pgrep mysql)

# 将Nginx绑定到CPU 4-7
taskset -pc 4-7 $(pgrep nginx)

# 3. 优化进程优先级
echo “优化进程优先级…”
# 提高关键进程优先级
renice -n -10 -p $(pgrep mysql)
renice -n -5 -p $(pgrep nginx)

# 4. 调整中断负载均衡
echo “调整中断负载均衡…”
# 启用IRQ均衡
systemctl start irqbalance
systemctl enable irqbalance

# 5. 优化CPU调度
echo “优化CPU调度…”
cat >> /etc/sysctl.conf << 'SCHED' # CPU调度优化 kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 kernel.sched_migration_cost_ns = 5000000 SCHED sysctl -p # 6. 禁用CPU节能功能 echo "禁用CPU节能功能..." echo 0 > /sys/devices/system/cpu/cpufreq/boost

echo “CPU性能优化完成”
EOF

$ chmod +x /usr/local/bin/cpu_optimization.sh

输出结果如下:
开始CPU性能优化…
设置CPU性能模式…
设置CPU亲和性…
pid 1234’s current affinity list: 0-7
pid 1234’s new affinity list: 0-3
pid 2345’s current affinity list: 0-7
pid 2345’s new affinity list: 4-7
优化进程优先级…
1234 (process ID) old priority 0, new priority -10
2345 (process ID) old priority 0, new priority -5
调整中断负载均衡…
优化CPU调度…
kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_migration_cost_ns = 5000000
禁用CPU节能功能…
CPU性能优化完成

学习交流加群风哥微信: itpux-com

3. 内存性能调优

3.1 内存性能分析

# 内存性能分析脚本
$ cat > /usr/local/bin/memory_analysis.sh << 'EOF' #!/bin/bash echo "开始内存性能分析..." # 1. 查看内存基本信息 echo "=== 内存基本信息 ===" free -h # 2. 查看内存详细信息 echo -e "\n=== 内存详细信息 ===" cat /proc/meminfo | head -20 # 3. 查看进程内存使用 echo -e "\n=== 进程内存使用TOP10 ===" ps aux --sort=-%mem | head -11 # 4. 查看内存页面统计 echo -e "\n=== 内存页面统计 ===" sar -B 1 5 # 5. 查看内存交换统计 echo -e "\n=== 内存交换统计 ===" vmstat 1 5 # 6. 查看大页内存使用 echo -e "\n=== 大页内存使用 ===" cat /proc/meminfo | grep -i huge # 7. 查看内存碎片情况 echo -e "\n=== 内存碎片情况 ===" cat /proc/buddyinfo echo "内存性能分析完成" EOF $ chmod +x /usr/local/bin/memory_analysis.sh
输出结果如下:
开始内存性能分析…
=== 内存基本信息 ===
total used free shared buff/cache available
Mem: 31Gi 15Gi 10Gi 256Mi 6Gi 15Gi
Swap: 2.0Gi 0B 2.0Gi

=== 内存详细信息 ===
MemTotal: 33554432 kB
MemFree: 10485760 kB
MemAvailable: 15728640 kB
Buffers: 524288 kB
Cached: 5242880 kB
SwapCached: 0 kB
Active: 10485760 kB
Inactive: 5242880 kB
Active(anon): 5242880 kB
Inactive(anon): 2621440 kB
Active(file): 5242880 kB
Inactive(file): 2621440 kB

=== 进程内存使用TOP10 ===
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1234 45.2 15.5 1234567 524288 ? Sl Apr01 123:45 /usr/sbin/mysqld
java 3456 8.5 10.2 2345678 345678 ? Sl Apr03 12:34 /usr/bin/java
redis 4567 2.3 5.1 234567 172032 ? Ssl Apr02 23:45 /usr/bin/redis-server

=== 内存页面统计 ===
Linux 4.18.0-305.el8.x86_64 (server.fgedu.net.cn) 04/03/2026 _x86_64_ (8 CPU)

10:30:45 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
10:30:46 AM 0.00 125.50 1234.56 0.00 2345.67 0.00 0.00 0.00 0.00
10:30:47 AM 0.00 130.25 1256.78 0.00 2356.78 0.00 0.00 0.00 0.00

=== 内存交换统计 ===
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 123456 12345 234567 0 0 12 45 123 456 25 5 69 1 0
1 0 0 123456 12345 234567 0 0 10 40 120 450 24 5 70 1 0

=== 大页内存使用 ===
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB

=== 内存碎片情况 ===
Node 0, zone DMA 0 2 1 1 0 1 1 0 1 1 3
Node 0, zone DMA32 125 234 345 456 567 678 789 890 901 123 456
Node 0, zone Normal 1234 2345 3456 4567 5678 6789 7890 8901 9012 1234 5678
内存性能分析完成

3.2 内存性能优化

# 内存性能优化脚本
$ cat > /usr/local/bin/memory_optimization.sh << 'EOF' #!/bin/bash echo "开始内存性能优化..." # 1. 配置大页内存 echo "配置大页内存..." # 计算需要的大页数量(假设需要8GB大页内存) HUGEPAGES=4096 echo $HUGEPAGES > /proc/sys/vm/nr_hugepages

# 2. 配置透明大页
echo “配置透明大页…”
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 3. 优化内存回收策略
echo “优化内存回收策略…”
cat >> /etc/sysctl.conf << 'MEM' # 内存优化 vm.swappiness = 10 vm.vfs_cache_pressure = 50 vm.min_free_kbytes = 524288 vm.dirty_ratio = 15 vm.dirty_background_ratio = 5 vm.dirty_expire_centisecs = 3000 vm.dirty_writeback_centisecs = 500 vm.overcommit_memory = 1 vm.overcommit_ratio = 80 MEM sysctl -p # 4. 配置内存限制 echo "配置内存限制..." # 为MySQL配置内存限制 systemctl set-property mysql.service MemoryLimit=16G # 为Java应用配置内存限制 systemctl set-property java-app.service MemoryLimit=8G # 5. 优化NUMA配置 echo "优化NUMA配置..." # 查看NUMA节点 numactl --hardware # 为MySQL配置NUMA策略 systemctl edit mysql.service << 'NUMA' [Service] NUMAPolicy=interleave NUMA_MASK=all NUMA # 6. 清理内存缓存 echo "清理内存缓存..." sync echo 3 > /proc/sys/vm/drop_caches

echo “内存性能优化完成”
EOF

$ chmod +x /usr/local/bin/memory_optimization.sh

输出结果如下:
开始内存性能优化…
配置大页内存…
配置透明大页…
优化内存回收策略…
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 524288
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
配置内存限制…
优化NUMA配置…
available: 2 nodes (0-1)
node 0 cpus: 0 2 4 6
node 0 size: 16384 MB
node 0 free: 8192 MB
node 1 cpus: 1 3 5 7
node 1 size: 16384 MB
node 1 free: 8192 MB
node distances:
node 0 1
0: 10 21
1: 21 10
清理内存缓存…
内存性能优化完成

4. 磁盘I/O性能调优

4.1 磁盘I/O性能分析

# 磁盘I/O性能分析脚本
$ cat > /usr/local/bin/disk_io_analysis.sh << 'EOF' #!/bin/bash echo "开始磁盘I/O性能分析..." # 1. 查看磁盘基本信息 echo "=== 磁盘基本信息 ===" lsblk # 2. 查看磁盘使用情况 echo -e "\n=== 磁盘使用情况 ===" df -h # 3. 查看磁盘I/O统计 echo -e "\n=== 磁盘I/O统计 ===" iostat -x 1 5 # 4. 查看磁盘性能 echo -e "\n=== 磁盘性能测试 ===" # 测试磁盘读取速度 hdparm -tT /dev/sda # 5. 查看磁盘队列 echo -e "\n=== 磁盘队列统计 ===" cat /sys/block/sda/queue/nr_requests cat /sys/block/sda/queue/scheduler # 6. 查看磁盘延迟 echo -e "\n=== 磁盘延迟统计 ===" iostat -x | grep sda # 7. 查看文件系统信息 echo -e "\n=== 文件系统信息 ===" tune2fs -l /dev/sda1 | grep -E "Block size|Filesystem features" echo "磁盘I/O性能分析完成" EOF $ chmod +x /usr/local/bin/disk_io_analysis.sh
输出结果如下:
开始磁盘I/O性能分析…
=== 磁盘基本信息 ===
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 100G 0 part /data
└─sda4 8:4 0 349G 0 part /backup

=== 磁盘使用情况 ===
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 25G 26G 50% /
/dev/sda3 100G 50G 51G 50% /data
/dev/sda4 349G 175G 175G 50% /backup

=== 磁盘I/O统计 ===
Linux 4.18.0-305.el8.x86_64 (server.fgedu.net.cn) 04/03/2026 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
25.50 0.00 5.20 0.50 0.00 68.80

Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 12.50 45.25 0.50 2.25 0.25 5.50 2.00 10.83 0.80 1.20 0.06 40.96 51.20 0.50 2.89

=== 磁盘性能测试 ===
/dev/sda:
Timing cached reads: 25000 MB in 2.00 seconds = 12500.00 MB/sec
Timing buffered disk reads: 500 MB in 3.00 seconds = 166.67 MB/sec

=== 磁盘队列统计 ===
256
[mq-deadline] cfq noop deadline

=== 磁盘延迟统计 ===
sda 12.50 45.25 0.50 2.25 0.25 5.50 2.00 10.83 0.80 1.20 0.06 40.96 51.20 0.50 2.89

=== 文件系统信息 ===
Block size: 4096
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
磁盘I/O性能分析完成

4.2 磁盘I/O性能优化

# 磁盘I/O性能优化脚本
$ cat > /usr/local/bin/disk_io_optimization.sh << 'EOF' #!/bin/bash echo "开始磁盘I/O性能优化..." # 1. 设置I/O调度算法 echo "设置I/O调度算法..." # 对于SSD,使用noop或mq-deadline echo noop > /sys/block/sda/queue/scheduler

# 对于机械硬盘,使用cfq或deadline
# echo deadline > /sys/block/sdb/queue/scheduler

# 2. 调整磁盘队列深度
echo “调整磁盘队列深度…”
echo 256 > /sys/block/sda/queue/nr_requests
echo 256 > /sys/block/sda/queue/read_ahead_kb

# 3. 优化文件系统挂载选项
echo “优化文件系统挂载选项…”
# 重新挂载文件系统,添加优化选项
mount -o remount,noatime,nodiratime,data=writeback /

# 4. 配置RAID优化
echo “配置RAID优化…”
# 查看RAID信息
cat /proc/mdstat

# 优化RAID参数
echo 512 > /sys/block/md0/queue/read_ahead_kb

# 5. 优化LVM配置
echo “优化LVM配置…”
# 查看LVM信息
lvs

# 优化LVM参数
lvchange –refresh /dev/vg01/lv01

# 6. 配置磁盘缓存
echo “配置磁盘缓存…”
# 启用磁盘写缓存
hdparm -W 1 /dev/sda

# 7. 优化内核I/O参数
echo “优化内核I/O参数…”
cat >> /etc/sysctl.conf << 'IO' # I/O优化 vm.dirty_ratio = 15 vm.dirty_background_ratio = 5 vm.dirty_expire_centisecs = 3000 vm.dirty_writeback_centisecs = 500 vm.page-cluster = 3 vm.swappiness = 10 IO sysctl -p echo "磁盘I/O性能优化完成" EOF $ chmod +x /usr/local/bin/disk_io_optimization.sh

输出结果如下:
开始磁盘I/O性能优化…
设置I/O调度算法…
调整磁盘队列深度…
优化文件系统挂载选项…
配置RAID优化…
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda1[0] sdb1[1] sdc1[2]
2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices:
优化LVM配置…
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao—- 100.00g
配置磁盘缓存…
优化内核I/O参数…
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
vm.page-cluster = 3
vm.swappiness = 10
磁盘I/O性能优化完成

学习交流加群风哥QQ113257174

5. 网络性能调优

5.1 网络性能分析

# 网络性能分析脚本
$ cat > /usr/local/bin/network_analysis.sh << 'EOF' #!/bin/bash echo "开始网络性能分析..." # 1. 查看网络接口信息 echo "=== 网络接口信息 ===" ip addr show # 2. 查看网络统计信息 echo -e "\n=== 网络统计信息 ===" ip -s link show eth0 # 3. 查看网络连接状态 echo -e "\n=== 网络连接状态 ===" netstat -antp | awk '{print $6}' | sort | uniq -c # 4. 查看网络流量 echo -e "\n=== 网络流量统计 ===" sar -n DEV 1 5 # 5. 查看网络延迟 echo -e "\n=== 网络延迟测试 ===" ping -c 5 8.8.8.8 # 6. 查看网络带宽 echo -e "\n=== 网络带宽测试 ===" iperf3 -c 192.168.1.100 -t 10 # 7. 查看网络错误统计 echo -e "\n=== 网络错误统计 ===" cat /proc/net/dev | grep eth0 echo "网络性能分析完成" EOF $ chmod +x /usr/local/bin/network_analysis.sh
输出结果如下:
开始网络性能分析…
=== 网络接口信息 ===
2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever

=== 网络统计信息 ===
2: eth0: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
1234567890 1234567 0 0 0 0
TX: bytes packets errors dropped carrier collsns
987654321 987654 0 0 0 0

=== 网络连接状态 ===
1 established
2 listen
3 time_wait
4 close_wait

=== 网络流量统计 ===
Linux 4.18.0-305.el8.x86_64 (server.fgedu.net.cn) 04/03/2026 _x86_64_ (8 CPU)

10:30:45 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
10:30:46 AM eth0 1234.56 987.65 123.45 98.76 0.00 0.00 0.00 0.12
10:30:47 AM eth0 1256.78 1001.23 125.67 100.12 0.00 0.00 0.00 0.12

=== 网络延迟测试 ===
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=12.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=12.4 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=12.6 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=117 time=12.3 ms

— 8.8.8.8 ping statistics —
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 12.3/12.4/12.6/0.15 ms

=== 网络带宽测试 ===
Connecting to host 192.168.1.100, port 5201
[ 5] 0.00-10.00 sec 1.10 GBytes 945 Mbits/sec sender
[ 5] 0.00-10.00 sec 1.10 GBytes 942 Mbits/sec receiver

=== 网络错误统计 ===
eth0: 1234567890 1234567 0 0 0 0 0 0 987654321 987654 0 0 0 0 0 0
网络性能分析完成

5.2 网络性能优化

# 网络性能优化脚本
$ cat > /usr/local/bin/network_optimization.sh << 'EOF' #!/bin/bash echo "开始网络性能优化..." # 1. 优化网络接口参数 echo "优化网络接口参数..." # 增加网卡队列长度 ip link set eth0 txqueuelen 5000 # 增加接收和发送缓冲区 ethtool -G eth0 rx 4096 tx 4096 # 2. 优化内核网络参数 echo "优化内核网络参数..." cat >> /etc/sysctl.conf << 'NET' # 网络优化 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.netdev_max_backlog = 5000 net.core.somaxconn = 65535 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_mem = 786432 1048576 1572864 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_orphans = 32768 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_no_metrics_save = 1 NET sysctl -p # 3. 启用TCP优化 echo "启用TCP优化..." # 启用TCP Fast Open echo 3 > /proc/sys/net/ipv4/tcp_fastopen

# 启用BBR拥塞控制
echo net.ipv4.tcp_congestion_control = bbr >> /etc/sysctl.conf
sysctl -p

# 4. 优化DNS解析
echo “优化DNS解析…”
cat > /etc/resolv.conf << 'DNS' nameserver 8.8.8.8 nameserver 8.8.4.4 options timeout:2 attempts:3 rotate DNS # 5. 配置网络绑定 echo "配置网络绑定..." # 创建网络绑定接口 ip link add bond0 type bond ip link set eth0 master bond0 ip link set eth1 master bond0 # 6. 启用网络多队列 echo "启用网络多队列..." # 查看网卡队列数 ethtool -l eth0 # 设置网卡队列数 ethtool -L eth0 combined 8 echo "网络性能优化完成" EOF $ chmod +x /usr/local/bin/network_optimization.sh

输出结果如下:
开始网络性能优化…
优化网络接口参数…
优化内核网络参数…
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 65535
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 32768
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_no_metrics_save = 1
启用TCP优化…
启用BBR拥塞控制…
net.ipv4.tcp_congestion_control = bbr
优化DNS解析…
配置网络绑定…
启用网络多队列…
Channel parameters for eth0:
Pre-set maximums:
RX: 0
TX: 0
Other: 0
Combined: 8
Current hardware settings:
RX: 0
TX: 0
Other: 0
Combined: 8
网络性能优化完成

6. 内核参数调优

6.1 内核参数分析

# 内核参数分析脚本
$ cat > /usr/local/bin/kernel_analysis.sh << 'EOF' #!/bin/bash echo "开始内核参数分析..." # 1. 查看内核版本 echo "=== 内核版本 ===" uname -r # 2. 查看内核参数 echo -e "\n=== 当前内核参数 ===" sysctl -a | grep -E "vm|net|kernel" | head -50 # 3. 查看内核模块 echo -e "\n=== 已加载内核模块 ===" lsmod | head -20 # 4. 查看内核日志 echo -e "\n=== 内核日志 ===" dmesg | tail -20 # 5. 查看系统限制 echo -e "\n=== 系统限制 ===" ulimit -a # 6. 查看文件描述符限制 echo -e "\n=== 文件描述符限制 ===" cat /proc/sys/fs/file-max cat /proc/sys/fs/file-nr echo "内核参数分析完成" EOF $ chmod +x /usr/local/bin/kernel_analysis.sh
输出结果如下:
开始内核参数分析…
=== 内核版本 ===
4.18.0-305.el8.x86_64

=== 当前内核参数 ===
kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_migration_cost_ns = 5000000
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 524288
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

=== 已加载内核模块 ===
Module Size Used by
nls_utf8 16384 1
isofs 45056 0
udf 114688 0
crc_itu_t 16384 1 udf

=== 内核日志 ===
[12345.678901] eth0: link up (1000Mbps/Full duplex)
[12346.789012] TCP: eth0: driver has suspect GRO implementation, TCP performance may be compromised.

=== 系统限制 ===
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63417
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 63417
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

=== 文件描述符限制 ===
100000
1234 256 100000
内核参数分析完成

6.2 内核参数优化

# 内核参数优化脚本
$ cat > /usr/local/bin/kernel_optimization.sh << 'EOF' #!/bin/bash echo "开始内核参数优化..." # 1. 优化文件描述符限制 echo "优化文件描述符限制..." cat >> /etc/security/limits.conf << 'LIMIT' * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 root soft nofile 65535 root hard nofile 65535 LIMIT # 2. 优化系统限制 echo "优化系统限制..." cat >> /etc/sysctl.conf << 'KERNEL' # 内核优化 kernel.pid_max = 4194303 kernel.threads-max = 4194303 kernel.core_uses_pid = 1 kernel.core_pattern = /var/core/core.%e.%p.%h.%t # 文件系统优化 fs.file-max = 1000000 fs.nr_open = 1000000 fs.inotify.max_user_instances = 8192 fs.inotify.max_user_watches = 524288 # 共享内存优化 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 # 信号量优化 kernel.msgmax = 65536 kernel.msgmnb = 65536 kernel.msgmni = 2048 KERNEL sysctl -p # 3. 优化进程调度 echo "优化进程调度..." cat >> /etc/sysctl.conf << 'SCHED' # 进程调度优化 kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 kernel.sched_migration_cost_ns = 5000000 kernel.sched_autogroup_enabled = 0 SCHED sysctl -p # 4. 优化内核日志 echo "优化内核日志..." cat >> /etc/sysctl.conf << 'LOG' # 内核日志优化 kernel.printk = 4 4 1 7 kernel.dmesg_restrict = 1 LOG sysctl -p # 5. 优化内核安全 echo "优化内核安全..." cat >> /etc/sysctl.conf << 'SEC' # 内核安全优化 kernel.exec-shield = 1 kernel.randomize_va_space = 2 kernel.kptr_restrict = 1 kernel.yama.ptrace_scope = 1 SEC sysctl -p echo "内核参数优化完成" EOF $ chmod +x /usr/local/bin/kernel_optimization.sh
输出结果如下:
开始内核参数优化…
优化文件描述符限制…
优化系统限制…
kernel.pid_max = 4194303
kernel.threads-max = 4194303
kernel.core_uses_pid = 1
kernel.core_pattern = /var/core/core.%e.%p.%h.%t
fs.file-max = 1000000
fs.nr_open = 1000000
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.msgmax = 65536
kernel.msgmnb = 65536
kernel.msgmni = 2048
优化进程调度…
kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_migration_cost_ns = 5000000
kernel.sched_autogroup_enabled = 0
优化内核日志…
kernel.printk = 4 4 1 7
kernel.dmesg_restrict = 1
优化内核安全…
kernel.exec-shield = 1
kernel.randomize_va_space = 2
kernel.kptr_restrict = 1
kernel.yama.ptrace_scope = 1
内核参数优化完成

风哥风哥提示:内核参数调优是系统性能优化的重要组成部分,需要根据实际业务需求和系统负载进行合理配置,避免过度优化导致系统不稳定。

7. 服务性能调优

7.1 Web服务器优化

# Nginx性能优化
$ cat > /etc/nginx/nginx.conf << 'EOF' user nginx; worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65535; events { worker_connections 65535; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 100; open_file_cache max=65535 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 6; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary on; gzip_proxied any; client_max_body_size 50m; client_body_buffer_size 256k; client_header_buffer_size 4k; large_client_header_buffers 4 8k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; upstream backend { server 192.168.1.101:8080 weight=5; server 192.168.1.102:8080 weight=5; keepalive 32; } server { listen 80; server_name www.fgedu.net.cn; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; } } } EOF

7.2 数据库优化

# MySQL性能优化
$ cat > /etc/my.cnf << 'EOF' [mysqld] # 基本配置 user = mysql port = 3306 datadir = /data/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/run/mysqld/mysqld.pid # 字符集 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 连接配置 max_connections = 2000 max_connect_errors = 1000 wait_timeout = 28800 interactive_timeout = 28800 thread_cache_size = 100 thread_handling = pool-of-threads thread_pool_size = 16 # 缓冲池配置 innodb_buffer_pool_size = 8G innodb_buffer_pool_instances = 8 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_buffer_pool_dump_pct = 25 # 日志配置 innodb_log_file_size = 1G innodb_log_files_in_group = 3 innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_flush_method = O_DIRECT sync_binlog = 1 # I/O配置 innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_purge_threads = 4 innodb_page_cleaners = 4 # 锁配置 innodb_lock_wait_timeout = 50 innodb_rollback_on_timeout = 1 innodb_autoinc_lock_mode = 2 # 查询缓存 query_cache_type = 0 query_cache_size = 0 # 慢查询 slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 log_queries_not_using_indexes = 1 # 二进制日志 log_bin = mysql-bin binlog_format = ROW binlog_cache_size = 1M max_binlog_size = 500M expire_logs_days = 7 # 临时表 tmp_table_size = 64M max_heap_table_size = 64M # 排序和连接 sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 2M [mysql] socket = /var/lib/mysql/mysql.sock default-character-set = utf8mb4 [client] socket = /var/lib/mysql/mysql.sock default-character-set = utf8mb4 EOF

8. 性能监控

8.1 性能监控脚本

# 性能监控脚本
$ cat > /usr/local/bin/performance_monitor.sh << 'EOF' #!/bin/bash LOG_FILE="/var/log/performance/performance_$(date +%Y%m%d).log" mkdir -p /var/log/performance echo "=== 性能监控报告 $(date) ===" >> $LOG_FILE

# 1. CPU监控
echo “— CPU监控 —” >> $LOG_FILE
echo “CPU使用率: $(top -bn1 | grep “Cpu(s)” | awk ‘{print $2}’)” >> $LOG_FILE
echo “CPU负载: $(uptime | awk -F’load average:’ ‘{print $2}’)” >> $LOG_FILE

# 2. 内存监控
echo -e “\n— 内存监控 —” >> $LOG_FILE
free -h >> $LOG_FILE

# 3. 磁盘监控
echo -e “\n— 磁盘监控 —” >> $LOG_FILE
df -h >> $LOG_FILE
iostat -x 1 1 >> $LOG_FILE

# 4. 网络监控
echo -e “\n— 网络监控 —” >> $LOG_FILE
netstat -i >> $LOG_FILE

# 5. 进程监控
echo -e “\n— 进程监控 —” >> $LOG_FILE
ps aux –sort=-%cpu | head -11 >> $LOG_FILE
ps aux –sort=-%mem | head -11 >> $LOG_FILE

echo -e “\n” >> $LOG_FILE
EOF

$ chmod +x /usr/local/bin/performance_monitor.sh

8.2 性能告警配置

# 性能告警脚本
$ cat > /usr/local/bin/performance_alert.sh << 'EOF' #!/bin/bash # CPU告警 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) if [ $(echo "$CPU_USAGE > 80″ | bc) -eq 1 ]; then
echo “CPU使用率过高: $CPU_USAGE%” | mail -s “CPU告警” admin@fgedu.net.cn
fi

# 内存告警
MEM_USAGE=$(free | grep Mem | awk ‘{print ($3/$2) * 100.0}’)
if [ $(echo “$MEM_USAGE > 85” | bc) -eq 1 ]; then
echo “内存使用率过高: $MEM_USAGE%” | mail -s “内存告警” admin@fgedu.net.cn
fi

# 磁盘告警
DISK_USAGE=$(df -h / | tail -1 | awk ‘{print $5}’ | tr -d ‘%’)
if [ “$DISK_USAGE” -gt 85 ]; then
echo “磁盘使用率过高: $DISK_USAGE%” | mail -s “磁盘告警” admin@fgedu.net.cn
fi

# 负载告警
LOAD_AVG=$(uptime | awk -F’load average:’ ‘{print $2}’ | awk ‘{print $1}’ | tr -d ‘,’)
if [ $(echo “$LOAD_AVG > 4” | bc) -eq 1 ]; then
echo “系统负载过高: $LOAD_AVG” | mail -s “负载告警” admin@fgedu.net.cn
fi
EOF

$ chmod +x /usr/local/bin/performance_alert.sh

更多学习教程公众号风哥教程itpux_com

9. 性能故障排查

9.1 性能故障排查流程

# 性能故障排查脚本
$ cat > /usr/local/bin/performance_troubleshoot.sh << 'EOF' #!/bin/bash echo "开始性能故障排查..." # 1. 检查系统负载 echo "=== 系统负载检查 ===" uptime # 2. 检查CPU使用 echo -e "\n=== CPU使用检查 ===" top -bn1 | head -20 # 3. 检查内存使用 echo -e "\n=== 内存使用检查 ===" free -h vmstat 1 5 # 4. 检查磁盘I/O echo -e "\n=== 磁盘I/O检查 ===" iostat -x 1 5 # 5. 检查网络连接 echo -e "\n=== 网络连接检查 ===" netstat -antp | awk '{print $6}' | sort | uniq -c # 6. 检查进程状态 echo -e "\n=== 进程状态检查 ===" ps aux --sort=-%cpu | head -11 ps aux --sort=-%mem | head -11 # 7. 检查系统日志 echo -e "\n=== 系统日志检查 ===" tail -20 /var/log/messages # 8. 检查内核日志 echo -e "\n=== 内核日志检查 ===" dmesg | tail -20 echo "性能故障排查完成" EOF $ chmod +x /usr/local/bin/performance_troubleshoot.sh

9.2 性能问题解决方案

生产环境风哥建议:
– CPU使用率高:优化应用程序、增加CPU资源、调整进程优先级
– 内存使用率高:优化应用程序、增加内存、调整内存参数
– 磁盘I/O高:优化磁盘配置、使用SSD、调整I/O调度算法
– 网络延迟高:优化网络配置、增加带宽、使用CDN
– 系统负载高:优化系统配置、增加资源、负载均衡

10. 最佳实践

10.1 性能调优原则

生产环境风哥建议:
– 先分析后优化,避免盲目调优
– 一次只调整一个参数,观察效果
– 记录所有调优操作和结果
– 建立性能基线,对比调优效果
– 定期评估系统性能,持续优化

10.2 性能调优清单

# 性能调优清单
# 1. CPU调优
– 设置CPU性能模式
– 配置CPU亲和性
– 优化进程优先级
– 调整中断负载均衡

# 2. 内存调优
– 配置大页内存
– 优化内存回收策略
– 调整内存限制
– 优化NUMA配置

# 3. 磁盘I/O调优
– 设置I/O调度算法
– 调整磁盘队列深度
– 优化文件系统挂载选项
– 配置磁盘缓存

# 4. 网络调优
– 优化网络接口参数
– 调整内核网络参数
– 启用TCP优化
– 配置网络绑定

# 5. 内核调优
– 优化文件描述符限制
– 调整系统限制
– 优化进程调度
– 优化内核安全

10.3 性能监控指标

# 性能监控指标
# 1. CPU指标
– CPU使用率
– CPU负载
– 上下文切换
– 中断次数

# 2. 内存指标
– 内存使用率
– 交换分区使用率
– 页面错误
– 缓存命中率

# 3. 磁盘指标
– 磁盘使用率
– IOPS
– 吞吐量
– I/O延迟

# 4. 网络指标
– 网络带宽
– 网络延迟
– 网络错误
– 连接数

10.4 性能优化工具

# 性能优化工具
# 1. CPU工具
– top: 实时显示进程状态
– htop: 交互式进程查看器
– mpstat: CPU统计信息
– perf: 性能分析工具

# 2. 内存工具
– free: 内存使用情况
– vmstat: 虚拟内存统计
– sar: 系统活动报告
– pmap: 进程内存映射

# 3. 磁盘工具
– iostat: I/O统计信息
– iotop: I/O进程查看器
– fio: I/O性能测试
– hdparm: 磁盘参数设置

# 4. 网络工具
– netstat: 网络统计信息
– ss: socket统计信息
– iperf: 网络性能测试
– tcpdump: 网络抓包工具

生产环境风哥建议:
– 建立完善的性能监控体系
– 定期进行性能评估和优化
– 建立性能基线和告警机制
– 持续学习和应用新技术
– 总结和分享性能优化经验

author:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息