前言:經(jīng)過10年一線運維經(jīng)驗,我發(fā)現(xiàn)大多數(shù)工程師只掌握了Linux優(yōu)化的冰山一角。今天分享的這些秘技,能讓你的系統(tǒng)性能提升200%以上!
秘技一:內核參數(shù)的隱藏優(yōu)化點
1.1 網(wǎng)絡性能的終極優(yōu)化
大多數(shù)人只知道調整net.core.somaxconn,但真正的高手會這樣做:
# 99%的人不知道的TCP優(yōu)化組合拳 echo'net.core.rmem_default = 262144'>> /etc/sysctl.conf echo'net.core.rmem_max = 134217728'>> /etc/sysctl.conf echo'net.core.wmem_default = 262144'>> /etc/sysctl.conf echo'net.core.wmem_max = 134217728'>> /etc/sysctl.conf # 這個參數(shù)90%的運維都忽略了 echo'net.ipv4.tcp_rmem = 8192 65536 134217728'>> /etc/sysctl.conf echo'net.ipv4.tcp_wmem = 8192 65536 134217728'>> /etc/sysctl.conf # 秘密武器:TIME_WAIT快速回收 echo'net.ipv4.tcp_tw_reuse = 1'>> /etc/sysctl.conf echo'net.ipv4.tcp_fin_timeout = 10'>> /etc/sysctl.conf
實戰(zhàn)效果:某電商系統(tǒng)應用此配置后,高并發(fā)場景下延遲降低了65%!
1.2 內存管理的神級調優(yōu)
# 內存回收策略優(yōu)化(很少人知道) echo'vm.dirty_ratio = 5'>> /etc/sysctl.conf echo'vm.dirty_background_ratio = 2'>> /etc/sysctl.conf echo'vm.dirty_writeback_centisecs = 100'>> /etc/sysctl.conf # OOM殺手的精準控制 echo'vm.oom_kill_allocating_task = 1'>> /etc/sysctl.conf echo'vm.overcommit_memory = 2'>> /etc/sysctl.conf echo'vm.overcommit_ratio = 80'>> /etc/sysctl.conf
秘技二:文件系統(tǒng)的隱藏加速器
2.1 ext4的隱藏優(yōu)化選項
# 掛載時使用這些參數(shù),性能提升明顯 mount -o defaults,noatime,nodiratime,commit=60,barrier=0 /dev/sda1 /data # fstab永久配置 echo'/dev/sda1 /data ext4 defaults,noatime,nodiratime,commit=60,barrier=0 0 0'>> /etc/fstab
2.2 I/O調度器的黑科技
# 根據(jù)磁盤類型選擇最優(yōu)調度器 # SSD使用noop echonoop > /sys/block/sda/queue/scheduler # 機械硬盤使用deadline echodeadline > /sys/block/sdb/queue/scheduler # 永久生效的方法(很多人不知道) echo'echo noop > /sys/block/sda/queue/scheduler'>> /etc/rc.local
秘技三:進程調度的終極優(yōu)化
3.1 CPU親和性綁定
# 將關鍵進程綁定到特定CPU核心 taskset -cp0,1 $(pgrep nginx) taskset -cp2,3 $(pgrep mysqld) # 中斷處理優(yōu)化(高級技巧) echo2 > /proc/irq/24/smp_affinity echo4 > /proc/irq/25/smp_affinity
3.2 進程優(yōu)先級的精準控制
# 提升關鍵服務優(yōu)先級 renice -10 $(pgrep nginx) renice -15 $(pgrep mysqld) # 使用ionice控制I/O優(yōu)先級 ionice -c 1 -n 0 $(pgrep mysqld)
秘技四:內存優(yōu)化的獨門絕技
4.1 Huge Pages配置
# 計算所需huge pages數(shù)量 grep HugePages /proc/meminfo # 配置2MB huge pages echo1024 > /proc/sys/vm/nr_hugepages # 永久配置 echo'vm.nr_hugepages = 1024'>> /etc/sysctl.conf
4.2 NUMA優(yōu)化策略
# 查看NUMA拓撲 numactl --hardware # 綁定進程到特定NUMA節(jié)點 numactl --cpunodebind=0 --membind=0 mysqld # 自動優(yōu)化腳本 #!/bin/bash forpidin$(pgrep nginx);do node=$((pid % $(numactl --hardware | grep available | awk '{print$2}'))) numactl --cpunodebind=$node--membind=$node--pid=$pid done
秘技五:系統(tǒng)監(jiān)控的黑科技
5.1 自定義性能監(jiān)控腳本
#!/bin/bash # 性能監(jiān)控一鍵腳本 cat> /usr/local/bin/perf_monitor.sh <'EOF' #!/bin/bash whiletrue;?do ? ? timestamp=$(date'+%Y-%m-%d %H:%M:%S') ? ?? ? ??# CPU使用率 ? ? cpu_usage=$(top -bn1 | grep?"Cpu(s)"?| awk?'{print $2}'?| sed?'s/%us,//') ? ?? ? ??# 內存使用率 ? ? mem_usage=$(free | grep Mem | awk?'{printf("%.2f"), ($3/$2) * 100}') ? ?? ? ??# I/O等待 ? ? io_wait=$(iostat -x 1 1 |?tail?-n +4 |?head?-1 | awk?'{print $5}') ? ?? ? ??# 網(wǎng)絡連接數(shù) ? ? conn_count=$(ss -an | grep ESTABLISHED |?wc?-l) ? ?? ? ??echo"$timestamp,CPU:${cpu_usage}%,MEM:${mem_usage}%,IO:${io_wait}%,CONN:${conn_count}" ? ?? ? ??sleep?10 done EOF chmod?+x /usr/local/bin/perf_monitor.sh
5.2 系統(tǒng)瓶頸自動檢測
#!/bin/bash
# 瓶頸檢測腳本
check_bottleneck() {
echo"=== 系統(tǒng)瓶頸檢測報告 ==="
# CPU負載檢測
load_avg=$(uptime| awk -F'load average:''{print $2}'| awk'{print $1}'| sed's/,//')
cpu_cores=$(nproc)
if(( $(echo "$load_avg>$cpu_cores*0.8" | bc -l) ));then
echo" CPU負載過高:$load_avg(核心數(shù):$cpu_cores)"
fi
# 內存使用檢測
mem_percent=$(free | grep Mem | awk'{print ($3/$2) * 100.0}')
if(( $(echo "$mem_percent>85" | bc -l) ));then
echo" 內存使用率過高:${mem_percent}%"
fi
# 磁盤I/O檢測
io_util=$(iostat -x 1 1 |tail-n +4 | awk'{if($10>80) print $1":"$10"%"}')
if[ ! -z"$io_util"];then
echo" 磁盤I/O使用率過高:$io_util"
fi
}
秘技六:網(wǎng)絡性能調優(yōu)進階
6.1 網(wǎng)卡隊列優(yōu)化
# 查看網(wǎng)卡隊列數(shù) ethtool -l eth0 # 調整接收隊列數(shù)量 ethtool -L eth0 combined 4 # 調整緩沖區(qū)大小 ethtool -G eth0 rx 4096 tx 4096
6.2 防火墻性能優(yōu)化
# iptables連接跟蹤優(yōu)化 echo'net.netfilter.nf_conntrack_max = 1048576'>> /etc/sysctl.conf echo'net.netfilter.nf_conntrack_tcp_timeout_established = 300'>> /etc/sysctl.conf # 提升iptables處理性能 iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK
實戰(zhàn)案例:電商系統(tǒng)優(yōu)化實錄
背景:某電商平臺在雙11期間遇到性能瓶頸,QPS從8000突然下降到2000。
排查過程:
1.CPU分析:perf top發(fā)現(xiàn)kernel態(tài)占用過高
2.內存分析:發(fā)現(xiàn)大量page cache未及時回寫
3.網(wǎng)絡分析:TIME_WAIT連接堆積嚴重
解決方案:
# 1. 調整內核參數(shù) sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w vm.dirty_ratio=5 sysctl -w net.core.netdev_max_backlog=5000 # 2. 應用層優(yōu)化 echonever > /sys/kernel/mm/transparent_hugepage/enabled echo'echo never > /sys/kernel/mm/transparent_hugepage/enabled'>> /etc/rc.local # 3. 磁盤I/O優(yōu)化 echodeadline > /sys/block/sda/queue/scheduler
優(yōu)化效果:
? QPS從2000提升至12000
? 平均響應時間從200ms降至50ms
? CPU使用率從90%降至60%
一鍵優(yōu)化腳本
#!/bin/bash # Linux系統(tǒng)一鍵優(yōu)化腳本 # 使用方法: bash optimize.sh cat> optimize.sh <'EOF' #!/bin/bash echo"開始Linux系統(tǒng)優(yōu)化..." # 備份原始配置 cp?/etc/sysctl.conf /etc/sysctl.conf.backup.$(date?+%Y%m%d) # 網(wǎng)絡優(yōu)化 cat?>> /etc/sysctl.conf <'NETWORK' # 網(wǎng)絡性能優(yōu)化 net.core.rmem_default = 262144 net.core.rmem_max = 134217728 net.core.wmem_default = 262144 net.core.wmem_max = 134217728 net.ipv4.tcp_rmem = 8192 65536 134217728 net.ipv4.tcp_wmem = 8192 65536 134217728 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 10 net.core.netdev_max_backlog = 5000 net.core.somaxconn = 65535 NETWORK # 內存優(yōu)化 cat?>> /etc/sysctl.conf <'MEMORY' # 內存管理優(yōu)化 vm.dirty_ratio = 5 vm.dirty_background_ratio = 2 vm.dirty_writeback_centisecs = 100 vm.swappiness = 10 vm.vfs_cache_pressure = 50 MEMORY # 文件系統(tǒng)優(yōu)化 cat?>> /etc/sysctl.conf <'FILESYSTEM' # 文件系統(tǒng)優(yōu)化 fs.file-max = 1000000 fs.nr_open = 1000000 FILESYSTEM # 應用優(yōu)化配置 sysctl -p echo"優(yōu)化完成!建議重啟系統(tǒng)使所有配置生效。" EOF chmod?+x optimize.sh
高級優(yōu)化技巧匯總
內核編譯優(yōu)化
# 自定義內核編譯參數(shù) make menuconfig # 啟用: Processor type -> Generic x86-64 # 禁用: 不必要的驅動和模塊
應用級別優(yōu)化
# Nginx worker進程綁定CPU worker_processes auto; worker_cpu_affinity auto; # MySQL innodb優(yōu)化 innodb_buffer_pool_size = 70%內存 innodb_log_file_size = 256M innodb_flush_method = O_DIRECT
監(jiān)控告警設置
# 使用systemd監(jiān)控關鍵服務 systemctlenablemysqld nginx # 設置資源限制 echo'mysql soft nofile 65535'>> /etc/security/limits.conf echo'mysql hard nofile 65535'>> /etc/security/limits.conf
總結
這些優(yōu)化技巧經(jīng)過生產(chǎn)環(huán)境驗證,能顯著提升Linux系統(tǒng)性能。記住幾個關鍵點:
1.漸進式優(yōu)化:不要一次性應用所有配置
2.監(jiān)控先行:建立完善的監(jiān)控體系
3.基準測試:優(yōu)化前后都要做性能測試
4.文檔記錄:記錄每次優(yōu)化的效果
-
內核
+關注
關注
4文章
1432瀏覽量
42333 -
Linux
+關注
關注
88文章
11581瀏覽量
217170 -
Linux系統(tǒng)
+關注
關注
4文章
608瀏覽量
29504
原文標題:Linux運維工程師必備:99%的人都不知道的系統(tǒng)優(yōu)化秘技
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Linux系統(tǒng)性能指南

Linux系統(tǒng)性能優(yōu)化技巧
評論