前言:經(jīng)過(guò)10年一線運(yùn)維經(jīng)驗(yàn),我發(fā)現(xiàn)大多數(shù)工程師只掌握了Linux優(yōu)化的冰山一角。今天分享的這些秘技,能讓你的系統(tǒng)性能提升200%以上!
秘技一:內(nèi)核參數(shù)的隱藏優(yōu)化點(diǎn)
1.1 網(wǎng)絡(luò)性能的終極優(yōu)化
大多數(shù)人只知道調(diào)整net.core.somaxconn,但真正的高手會(huì)這樣做:
# 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 # 這個(gè)參數(shù)90%的運(yùn)維都忽略了 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
實(shí)戰(zhàn)效果:某電商系統(tǒng)應(yīng)用此配置后,高并發(fā)場(chǎng)景下延遲降低了65%!
1.2 內(nèi)存管理的神級(jí)調(diào)優(yōu)
# 內(nèi)存回收策略優(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殺手的精準(zhǔn)控制 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)化選項(xiàng)
# 掛載時(shí)使用這些參數(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調(diào)度器的黑科技
# 根據(jù)磁盤類型選擇最優(yōu)調(diào)度器 # SSD使用noop echonoop > /sys/block/sda/queue/scheduler # 機(jī)械硬盤使用deadline echodeadline > /sys/block/sdb/queue/scheduler # 永久生效的方法(很多人不知道) echo'echo noop > /sys/block/sda/queue/scheduler'>> /etc/rc.local
秘技三:進(jìn)程調(diào)度的終極優(yōu)化
3.1 CPU親和性綁定
# 將關(guān)鍵進(jìn)程綁定到特定CPU核心 taskset -cp0,1 $(pgrep nginx) taskset -cp2,3 $(pgrep mysqld) # 中斷處理優(yōu)化(高級(jí)技巧) echo2 > /proc/irq/24/smp_affinity echo4 > /proc/irq/25/smp_affinity
3.2 進(jìn)程優(yōu)先級(jí)的精準(zhǔn)控制
# 提升關(guān)鍵服務(wù)優(yōu)先級(jí) renice -10 $(pgrep nginx) renice -15 $(pgrep mysqld) # 使用ionice控制I/O優(yōu)先級(jí) ionice -c 1 -n 0 $(pgrep mysqld)
秘技四:內(nèi)存優(yōu)化的獨(dú)門絕技
4.1 Huge Pages配置
# 計(jì)算所需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拓?fù)?numactl --hardware # 綁定進(jìn)程到特定NUMA節(jié)點(diǎn) numactl --cpunodebind=0 --membind=0 mysqld # 自動(dòng)優(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,//') ? ?? ? ??# 內(nèi)存使用率 ? ? 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)絡(luò)連接數(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)瓶頸自動(dòng)檢測(cè)
#!/bin/bash # 瓶頸檢測(cè)腳本 check_bottleneck() { echo"=== 系統(tǒng)瓶頸檢測(cè)報(bào)告 ===" # CPU負(fù)載檢測(cè) 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負(fù)載過(guò)高:$load_avg(核心數(shù):$cpu_cores)" fi # 內(nèi)存使用檢測(cè) mem_percent=$(free | grep Mem | awk'{print ($3/$2) * 100.0}') if(( $(echo "$mem_percent>85" | bc -l) ));then echo" 內(nèi)存使用率過(guò)高:${mem_percent}%" fi # 磁盤I/O檢測(cè) io_util=$(iostat -x 1 1 |tail-n +4 | awk'{if($10>80) print $1":"$10"%"}') if[ ! -z"$io_util"];then echo" 磁盤I/O使用率過(guò)高:$io_util" fi }
秘技六:網(wǎng)絡(luò)性能調(diào)優(yōu)進(jìn)階
6.1 網(wǎng)卡隊(duì)列優(yōu)化
# 查看網(wǎng)卡隊(duì)列數(shù) ethtool -l eth0 # 調(diào)整接收隊(duì)列數(shù)量 ethtool -L eth0 combined 4 # 調(diào)整緩沖區(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
實(shí)戰(zhàn)案例:電商系統(tǒng)優(yōu)化實(shí)錄
背景:某電商平臺(tái)在雙11期間遇到性能瓶頸,QPS從8000突然下降到2000。
排查過(guò)程:
1.CPU分析:perf top發(fā)現(xiàn)kernel態(tài)占用過(guò)高
2.內(nèi)存分析:發(fā)現(xiàn)大量page cache未及時(shí)回寫
3.網(wǎng)絡(luò)分析:TIME_WAIT連接堆積嚴(yán)重
解決方案:
# 1. 調(diào)整內(nèi)核參數(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īng)用層優(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
? 平均響應(yīng)時(shí)間從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)絡(luò)優(yōu)化 cat?>> /etc/sysctl.conf <'NETWORK' # 網(wǎng)絡(luò)性能優(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 # 內(nèi)存優(yōu)化 cat?>> /etc/sysctl.conf <'MEMORY' # 內(nèi)存管理優(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īng)用優(yōu)化配置 sysctl -p echo"優(yōu)化完成!建議重啟系統(tǒng)使所有配置生效。" EOF chmod?+x optimize.sh
高級(jí)優(yōu)化技巧匯總
內(nèi)核編譯優(yōu)化
# 自定義內(nèi)核編譯參數(shù) make menuconfig # 啟用: Processor type -> Generic x86-64 # 禁用: 不必要的驅(qū)動(dòng)和模塊
應(yīng)用級(jí)別優(yōu)化
# Nginx worker進(jìn)程綁定CPU worker_processes auto; worker_cpu_affinity auto; # MySQL innodb優(yōu)化 innodb_buffer_pool_size = 70%內(nèi)存 innodb_log_file_size = 256M innodb_flush_method = O_DIRECT
監(jiān)控告警設(shè)置
# 使用systemd監(jiān)控關(guān)鍵服務(wù) systemctlenablemysqld nginx # 設(shè)置資源限制 echo'mysql soft nofile 65535'>> /etc/security/limits.conf echo'mysql hard nofile 65535'>> /etc/security/limits.conf
總結(jié)
這些優(yōu)化技巧經(jīng)過(guò)生產(chǎn)環(huán)境驗(yàn)證,能顯著提升Linux系統(tǒng)性能。記住幾個(gè)關(guān)鍵點(diǎn):
1.漸進(jìn)式優(yōu)化:不要一次性應(yīng)用所有配置
2.監(jiān)控先行:建立完善的監(jiān)控體系
3.基準(zhǔn)測(cè)試:優(yōu)化前后都要做性能測(cè)試
4.文檔記錄:記錄每次優(yōu)化的效果
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1427瀏覽量
42207 -
Linux
+關(guān)注
關(guān)注
88文章
11575瀏覽量
216587 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
608瀏覽量
29371
原文標(biāo)題:Linux運(yùn)維工程師必備:99%的人都不知道的系統(tǒng)優(yōu)化秘技
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux系統(tǒng)性能指南

HBase性能優(yōu)化方法總結(jié)
Linux系統(tǒng)的性能優(yōu)化策略
Linux和Android系統(tǒng)故障和優(yōu)化性能的方法和流程探討
鏡像對(duì)系統(tǒng)性能的影響有哪些?
如何提高FPGA的系統(tǒng)性能
如何優(yōu)化汽車電源系統(tǒng)性能的布板原則呢?
一文帶你詳解芯片--SL8541e-系統(tǒng)性能優(yōu)化
優(yōu)化BIOS設(shè)置提高系統(tǒng)性能
配置控制器局域網(wǎng)絡(luò)(CAN)位時(shí)序,優(yōu)化系統(tǒng)性能
Linux文件系統(tǒng)性能優(yōu)化
Linux CPU的性能應(yīng)該如何優(yōu)化
如何優(yōu)化電源能效和系統(tǒng)性能
超低抖動(dòng)時(shí)鐘發(fā)生器如何優(yōu)化串行鏈路系統(tǒng)性能

評(píng)論