Linux系统性能分析与优化建议

代码脚本 · 基础巡检

全面分析Linux系统性能指标(CPU、内存、磁盘IO、网络),识别瓶颈并给出优化建议

详细内容

#!/bin/bash # ========================================== # Linux系统性能分析与优化建议 # 用途:全面分析系统性能,识别瓶颈,给出优化建议 # 使用方法:bash system_perf_analysis.sh # ========================================== echo "========== 系统性能分析报告 ==========" echo "分析时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "主机名: $(hostname)" echo "系统: $(uname -r)" echo "" # 1. CPU分析 echo "【1. CPU性能分析】" CPU_CORES=$(nproc) CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//') LOAD_PER_CORE=$(echo "scale=2; $CPU_LOAD / $CPU_CORES" | bc) echo " CPU核心数: $CPU_CORES" echo " 1分钟平均负载: $CPU_LOAD" echo " 每核负载: $LOAD_PER_CORE" if (( $(echo "$LOAD_PER_CORE > 0.7" | bc -l) )); then echo " ⚠️ CPU负载较高,建议:" echo " - 检查高CPU占用进程: ps aux --sort=-%cpu | head -10" echo " - 考虑升级CPU或增加核心数" echo " - 优化应用程序,减少CPU密集型操作" else echo " ✅ CPU负载正常" fi # CPU使用率 CPU_IDLE=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}' | sed 's/%id,//') CPU_USAGE=$(echo "scale=1; 100 - $CPU_IDLE" | bc) echo " CPU使用率: ${CPU_USAGE}%" echo "" # 2. 内存分析 echo "【2. 内存性能分析】" MEM_TOTAL=$(free -m | awk 'NR==2{print $2}') MEM_USED=$(free -m | awk 'NR==2{print $3}') MEM_AVAILABLE=$(free -m | awk 'NR==2{print $7}') MEM_USAGE_PCT=$(echo "scale=1; $MEM_USED * 100 / $MEM_TOTAL" | bc) echo " 总内存: ${MEM_TOTAL}MB" echo " 已使用: ${MEM_USED}MB" echo " 可用: ${MEM_AVAILABLE}MB" echo " 使用率: ${MEM_USAGE_PCT}%" if (( $(echo "$MEM_USAGE_PCT > 85" | bc -l) )); then echo " ⚠️ 内存使用率较高,建议:" echo " - 检查高内存占用进程: ps aux --sort=-%mem | head -10" echo " - 考虑增加内存" echo " - 检查是否有内存泄漏" echo " - 调整swappiness参数: sysctl vm.swappiness=10" else echo " ✅ 内存使用正常" fi # Swap使用 SWAP_TOTAL=$(free -m | awk 'NR==3{print $2}') SWAP_USED=$(free -m | awk 'NR==3{print $3}') if [ "$SWAP_TOTAL" -gt 0 ]; then SWAP_PCT=$(echo "scale=1; $SWAP_USED * 100 / $SWAP_TOTAL" | bc) echo " Swap使用率: ${SWAP_PCT}%" if (( $(echo "$SWAP_PCT > 50" | bc -l) )); then echo " ⚠️ Swap使用较多,可能存在内存压力" fi fi echo "" # 3. 磁盘IO分析 echo "【3. 磁盘IO性能分析】" if command -v iostat &> /dev/null; then echo " 磁盘IO统计 (iostat):" iostat -dx 1 2 | tail -n +4 | head -n 10 | awk '{printf " %-15s 读: %-8s 写: %-8s 利用率: %s%% ", $1, $6, $7, $14}' else echo " ⚠️ iostat未安装,建议安装sysstat: yum install sysstat" fi # 磁盘空间 echo " 磁盘空间使用:" df -h | grep -v tmpfs | grep -v devtmpfs | awk 'NR>1{printf " %-20s 使用率: %-6s 可用: %s ", $6, $5, $4}' echo "" # 4. 网络分析 echo "【4. 网络性能分析】" if command -v ss &> /dev/null; then TCP_CONN=$(ss -s | grep 'TCP:' | awk '{print $2}') echo " TCP连接数: $TCP_CONN" echo " 监听端口:" ss -tlnp | grep LISTEN | awk '{printf " %-20s %s ", $4, $6}' | head -10 fi # 网络流量 if command -v ifstat &> /dev/null; then echo " 网络流量 (ifstat):" ifstat 1 1 2>/dev/null | tail -3 fi echo "" # 5. 优化建议汇总 echo "【5. 系统优化建议汇总】" echo " 1. 文件描述符限制:" CURRENT_ULIMIT=$(ulimit -n) echo " 当前: $CURRENT_ULIMIT,建议: 65535" if [ "$CURRENT_ULIMIT" -lt 65535 ]; then echo " → 修改 /etc/security/limits.conf 添加: * soft nofile 65535" fi echo " 2. 内核参数优化:" echo " → net.core.somaxconn = 65535 (提高连接队列)" echo " → net.ipv4.tcp_max_syn_backlog = 65535" echo " → vm.swappiness = 10 (减少swap使用)" echo " → fs.file-max = 1000000 (系统级文件描述符)" echo " 3. 定时任务:" echo " → 建议配置定时性能监控,记录历史数据" echo " → 定期清理日志文件,避免磁盘占满" echo "" echo "========== 分析完成 =========="

适配环境

适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+

依赖环境:bash 4.0+

参数说明

[]
性能分析优化系统调优监控

更多基础巡检