flowchartTDA[性能问题反馈]--> B[问题定位与分析]B--> C{确定瓶颈类型?}C-->|CPU瓶颈| D[CPU优化策略]C-->|内存瓶颈| E[内存优化策略]C-->|IO瓶颈| F[磁盘IO优化]C-->|网络瓶颈| G[网络优化]D--> H[实施优化措施]E--> HF--> HG--> HH--> I[效果验证]I--> J{性能达标?}J-->|是| K[优化完成]J-->|否| BstyleAfill:#e1f5festyleKfill:#c8e6c9
#!/bin/bash# cpu-performance-analysis.shecho"=== CPU性能分析 $(date) ==="# 1. 总体CPU使用率echo"1. CPU总体使用率:"mpstat 1 3 | awk '/Average/ {printf "用户: %.1f%%, 系统: %.1f%%, 空闲: %.1f%%\n", $4, $6, $13}'# 2. CPU负载echo -e "\n2. 系统负载:"echo"1分钟: $(cat /proc/loadavg | awk '{print $1}')"echo"5分钟: $(cat /proc/loadavg | awk '{print $2}')"echo"15分钟: $(cat /proc/loadavg | awk '{print $3}')"echo"CPU核心数: $(nproc)"# 3. 进程CPU使用排名echo -e "\n3. CPU使用前10进程:"ps aux --sort=-%cpu | head -11 | awk '{if(NR>1) printf "%-10s %-6s %s\n", $11, $3, $1}'# 4. 上下文切换和中断echo -e "\n4. 上下文切换和中断:"vmstat 1 3 | tail -1 | awk '{printf "上下文切换: %d/s, 中断: %d/s\n", $12, $11}'# 5. CPU频率和状态echo -e "\n5. CPU频率信息:"ifcommand -v cpupower &>/dev/null; then cpupower frequency-info | grep -E "(current CPU|governor)"else cat /proc/cpuinfo | grep -E "(cpu MHz|model name)" | head -2fi
#!/bin/bash# cpu-optimization.shecho"=== CPU性能优化配置 ==="# 1. 调整CPU调度器echo"1. 调整CPU调度策略..."# 对于桌面系统使用ondemand,服务器使用performancecpupower frequency-set -g performance# 2. 中断平衡配置echo"2. 配置中断平衡..."ifcommand -v irqbalance &>/dev/null; then systemctl enable irqbalance systemctl start irqbalancefi# 3. 进程优先级调整echo"3. 优化进程优先级..."# 降低后台进程优先级echo'*/5 * * * * renice +5 $(pgrep -f "backup\|cron")' > /etc/cron.d/process-priority# 4. CPU亲和性设置echo"4. 设置CPU亲和性..."# 将网络中断绑定到特定CPUIRQ=$(grep eth0 /proc/interrupts | awk -F: '{print $1}')echo"将中断 $IRQ 绑定到CPU0"echo 1 > /proc/irq/$IRQ/smp_affinity# 5. 内核参数优化echo"5. 优化内核CPU参数..."cat >> /etc/sysctl.conf << EOF# CPU性能优化kernel.sched_autogroup_enabled = 0kernel.sched_migration_cost = 5000000kernel.sched_min_granularity_ns = 10000000kernel.sched_wakeup_granularity_ns = 15000000EOFsysctl -pecho"CPU优化配置完成!"
#!/bin/bash# memory-performance-analysis.shecho"=== 内存性能分析 $(date) ==="# 1. 内存总体使用情况echo"1. 内存使用概况:"free -h | awk '/Mem:/ {printf "总内存: %s, 已用: %s, 可用: %s, 使用率: %.1f%%\n", $2, $3, $7, $3/$2*100}/Swap:/ {printf "交换分区: %s, 已用: %s, 空闲: %s\n", $2, $3, $4}'# 2. 详细内存统计echo -e "\n2. 详细内存信息:"cat /proc/meminfo | grep -E "(MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree)"# 3. 内存使用前10进程echo -e "\n3. 内存使用前10进程:"ps aux --sort=-%mem | head -11 | awk '{if(NR>1) printf "%-10s %-6s %s\n", $11, $4, $1}'# 4. Slab缓存信息echo -e "\n4. Slab缓存:"slabtop -o | head -10# 5. 页面错误统计echo -e "\n5. 页面错误统计:"vmstat -s | grep -E "(page|swap)"# 6. 检查内存泄漏echo -e "\n6. 内存泄漏检查:"ifcommand -v valgrind &>/dev/null; thenecho"Valgrind可用,可用于内存泄漏检测"elseecho"安装valgrind进行内存泄漏检测: apt install valgrind"fi
#!/bin/bash# memory-optimization.shecho"=== 内存性能优化配置 ==="# 1. 配置交换分区策略echo"1. 优化交换分区使用..."# 降低swappiness值,减少交换频率echo'vm.swappiness = 10' >> /etc/sysctl.conf# 2. 配置大页内存echo"2. 配置透明大页(THP)..."# 对于数据库等内存密集型应用建议使用madviseecho'madvise' > /sys/kernel/mm/transparent_hugepage/enabledecho'madvise' > /sys/kernel/mm/transparent_hugepage/defrag# 3. 配置overcommit策略echo"3. 设置内存overcommit策略..."echo'vm.overcommit_memory = 1' >> /etc/sysctl.confecho'vm.overcommit_ratio = 80' >> /etc/sysctl.conf# 4. 调整缓存参数echo"4. 优化内存缓存..."cat >> /etc/sysctl.conf << EOF# 内存缓存优化vm.dirty_ratio = 10vm.dirty_background_ratio = 5vm.dirty_expire_centisecs = 3000vm.vfs_cache_pressure = 50EOF# 5. 配置OOM killerecho"5. 配置OOM killer策略..."# 保护重要进程不被OOM killer杀死echo'-1000' > /proc/$(pgrep sshd)/oom_score_adj# 6. 启用内存压缩echo"6. 启用zswap内存压缩..."if grep -q zswap /etc/default/grub; thenecho"zswap已启用"elseecho'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT zswap.enabled=1 zswap.compressor=lz4"' >> /etc/default/grub update-grubfisysctl -pecho"内存优化配置完成!"
#!/bin/bash# disk-io-analysis.shecho"=== 磁盘I/O性能分析 $(date) ==="# 1. 总体磁盘使用情况echo"1. 磁盘空间使用:"df -h | grep -E '(/dev/sd|/dev/xvd|/dev/nvme)'# 2. I/O统计信息echo -e "\n2. 磁盘I/O统计:"iostat -x 1 3 | awk 'NR==3 {print "总体I/O统计:"}NR>=4 && NR<=6 {printf "设备: %s, 读: %.1fMB/s, 写: %.1fMB/s, 利用率: %.1f%%\n", $1, $3, $4, $14}'# 3. 等待I/O的进程echo -e "\n3. I/O等待进程:"iotop -o -b -n 3 | head -10# 4. 文件系统类型和挂载参数echo -e "\n4. 文件系统配置:"mount | grep -E '(/dev/sd|/dev/xvd|/dev/nvme)' | awk '{print "设备: "$1", 类型: "$5", 参数: "$6}'# 5. 磁盘调度器echo -e "\n5. 磁盘调度器:"for disk in /sys/block/sd*; doecho"设备: $(basename $disk), 调度器: $(cat $disk/queue/scheduler)"done# 6. RAID状态检查echo -e "\n6. RAID状态检查:"if [ -f /proc/mdstat ]; then cat /proc/mdstatelseecho"未检测到软件RAID"fi
#!/bin/bash# disk-io-optimization.shecho"=== 磁盘I/O性能优化配置 ==="# 1. 调整I/O调度器echo"1. 优化磁盘调度器..."# 对于SSD使用noop或deadline,HDD使用deadline或cfqfor disk in /sys/block/sd*; doif [ $(cat $disk/queue/rotational) -eq 0 ]; thenecho"SSD设备: $(basename $disk),设置调度器为deadline"echo deadline > $disk/queue/schedulerelseecho"HDD设备: $(basename $disk),设置调度器为cfq"echo cfq > $disk/queue/schedulerfidone# 2. 调整I/O队列深度echo"2. 优化队列深度..."for disk in /sys/block/sd*; doecho 256 > $disk/queue/nr_requestsecho 128 > $disk/queue/read_ahead_kbdone# 3. 文件系统优化echo"3. 优化文件系统挂载参数..."# 修改/etc/fstab,添加noatime,nodiratime等参数sed -i 's/defaults/defaults,noatime,nodiratime,barrier=0/' /etc/fstab# 4. 调整虚拟内存参数echo"4. 优化虚拟内存I/O..."cat >> /etc/sysctl.conf << EOF# 磁盘I/O优化vm.dirty_background_ratio = 5vm.dirty_ratio = 10vm.dirty_writeback_centisecs = 500vm.dirty_expire_centisecs = 3000vm.swappiness = 10EOF# 5. 使用ionice调整进程I/O优先级echo"5. 设置进程I/O优先级..."# 将备份进程设置为低I/O优先级echo'0 2 * * * ionice -c 3 /usr/bin/backup-script' >> /etc/crontab# 6. 启用TRIM(SSD优化)echo"6. 启用SSD TRIM支持..."ifcommand -v fstrim &>/dev/null; thenecho'0 0 * * 0 /sbin/fstrim -a' >> /etc/crontabecho"TRIM已启用,每周执行一次"fisysctl -pmount -o remount /echo"磁盘I/O优化配置完成!"
#!/bin/bash# network-performance-analysis.shecho"=== 网络性能分析 $(date) ==="# 1. 网络接口统计echo"1. 网络接口统计:"ip -s link show | awk '/^[0-9]:/ {iface=$2; getline; getline; rx=$1; getline; tx=$1; printf "接口: %s, 接收: %s, 发送: %s\n", iface, rx, tx}'# 2. TCP连接状态echo -e "\n2. TCP连接状态:"ss -s | head -3# 3. 网络错误统计echo -e "\n3. 网络错误统计:"netstat -i | awk 'NR>2 {printf "接口: %s, 错误: %s/%s\n", $1, $5, $6}'# 4. 带宽使用情况echo -e "\n4. 带宽使用监控:"ifcommand -v iftop &>/dev/null; thenecho"使用 iftop -i eth0 -n -P 查看实时带宽"else sar -n DEV 1 3 | awk '/Average/ && $2 != "lo" {printf "接口: %s, 接收: %.1fKB/s, 发送: %.1fKB/s\n", $2, $5, $6}'fi# 5. 网络延迟测试echo -e "\n5. 网络延迟检查:"ping -c 4 8.8.8.8 | awk '/packet loss/ {print "丢包率: "$6} /rtt/ {print "延迟: "$4}'# 6. 路由和MTU检查echo -e "\n6. 路由和MTU配置:"ip route | head -3ip link show | grep mtu
#!/bin/bash# network-optimization.shecho"=== 网络性能优化配置 ==="# 1. 调整TCP内核参数echo"1. 优化TCP协议栈..."cat >> /etc/sysctl.conf << EOF# 网络性能优化net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.core.rmem_default = 16777216net.core.wmem_default = 16777216net.core.netdev_max_backlog = 30000net.core.somaxconn = 32768# TCP参数优化net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_timestamps = 1net.ipv4.tcp_sack = 1net.ipv4.tcp_congestion_control = cubicnet.ipv4.tcp_max_syn_backlog = 32768net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 1200net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 5EOF# 2. 调整网络接口参数echo"2. 优化网络接口..."INTERFACE=$(ip route | awk '/default/ {print $5}')if [ -n "$INTERFACE" ]; then# 调整队列长度 ethtool -G $INTERFACE rx 4096 tx 4096 2>/dev/null# 启用GRO和LRO ethtool -K $INTERFACE gro on lro on 2>/dev/null# 调整中断合并 ethtool -C $INTERFACE rx-usecs 8 2>/dev/nullfi# 3. 优化DNS解析echo"3. 优化DNS配置..."echo'options timeout:1 attempts:2 rotate' > /etc/resolv.conf# 4. 调整连接跟踪echo"4. 优化连接跟踪表..."echo'net.netfilter.nf_conntrack_max = 524288' >> /etc/sysctl.confecho'net.netfilter.nf_conntrack_tcp_timeout_established = 3600' >> /etc/sysctl.conf# 5. 启用TCP Fast Openecho"5. 启用TCP Fast Open..."echo'net.ipv4.tcp_fastopen = 3