爲什麼要進行Linux系統調優?¶
服務器是業務的核心,一旦性能出現問題,輕則影響用戶體驗,重則導致服務中斷。Linux系統調優的目標就是通過合理配置和優化,讓服務器跑得更快、更穩,資源利用率更高。想象一下:如果你的網站突然變慢,用戶訪問卡頓,可能就是服務器“喫不消”了——這時候就需要我們用調優手段“對症下藥”。
常見性能瓶頸及定位工具¶
服務器性能問題通常集中在幾個方面:CPU、內存、磁盤I/O、網絡。要優化,得先找到“瓶頸”在哪裏。以下是最基礎的診斷工具:
1. 查看系統整體狀態:dstat(可選)¶
如果服務器安裝了dstat(需先安裝,如yum install dstat),它能綜合展示CPU、內存、磁盤、網絡的即時數據:
dstat 1 # 每秒更新一次,按Ctrl+C退出
重點看:
- CPU:%usr(用戶進程佔用)、%sys(內核進程佔用)、%idle(空閒率)
- 內存:used(已用)、buff/cache(緩存/緩衝,越大越好)
- 磁盤:read/write(讀寫速度)、%util(設備忙碌率,>80%則可能瓶頸)
- 網絡:recv/send(收發速率)
2. 查看CPU與負載:top¶
如果沒裝dstat,top是最常用的即時監控工具:
top
關鍵指標:
- Load Average(負載均衡):第一行的三個數字(1分鐘/5分鐘/15分鐘),反映等待CPU處理的任務數。若CPU核心數爲4,負載值長期>4則需優化(任務堆積)。
- CPU使用率:第三行us(用戶進程)、sy(內核進程)、id(空閒)。若us>80%,可能是應用代碼低效;若sy>30%,可能是內核線程(如驅動)繁忙。
- IO等待:wa(磁盤/網絡IO等待時間),若wa>20%,說明IO太慢(需檢查磁盤或網絡)。
3. 查看內存使用:free -h¶
free -h # 人類可讀格式顯示內存
關鍵指標:
- Total/Used/Free:總內存、已用、空閒。
- Buff/Cache:緩存數據(如文件、網絡數據),越大越好(提升性能)。
- Swap:交換分區,若Swap Used頻繁增加,說明物理內存不足(需加內存或優化應用)。
4. 查看磁盤I/O:iostat -x 1¶
iostat -x 1 # 1秒刷新一次,-x顯示擴展信息
關鍵指標:
- %util:磁盤設備忙碌率,>80% 說明磁盤“太忙”(讀寫隊列長)。
- r/s/w/s:每秒讀寫次數,若r/s/w/s很高但kB_read/s/kB_wrtn/s低,可能是隨機讀寫過多(需優化IO模式)。
5. 查看網絡連接:ss -tuln¶
ss -tuln # 查看TCP/UDP監聽端口及連接狀態
關鍵指標:
- LISTEN:服務監聽的端口(如80、443)。
- ESTABLISHED:已建立的連接數,若過多(如超過1000)且持續增長,可能是併發連接過多(需優化連接池或系統參數)。
針對性調優方法¶
一、CPU優化¶
1. 定位高CPU進程¶
用top按P(CPU排序)找到佔用最高的進程,再用ps -p <PID> -o comm=,%cpu=,%mem=查看詳情。若進程持續佔用高CPU,可能是死循環或低效代碼(聯繫開發優化)。
2. 減少系統級CPU佔用¶
若sy(內核佔用)高,可能是頻繁的系統調用(如文件鎖、網絡連接)。檢查內核日誌dmesg | grep -i error,或用strace跟蹤進程系統調用(需臨時調試)。
二、內存優化¶
1. 檢查內存泄漏¶
若free -h的Free長期低、Swap Used持續增加,用ps aux --sort=-%mem | head查看內存佔用最高的進程。若進程退出後內存未釋放,可能是內存泄漏(重啓進程或修復代碼)。
2. 合理配置緩存¶
Linux的緩存(buff/cache)是優化核心:緩存越大,磁盤訪問越少。若因內存不足導致緩存被回收,反而會降低性能。無需主動清理緩存,系統會自動管理。
三、磁盤I/O優化¶
1. 優化隨機讀寫¶
機械硬盤(HDD)隨機讀寫慢,建議:
- 將頻繁訪問的數據庫、日誌文件遷移到SSD(速度提升10倍以上)。
- 合併小文件寫入(如應用日誌用logrotate定期輪轉,避免頻繁小文件操作)。
2. 減少磁盤等待¶
若iostat顯示%util>80%,檢查是否有進程持續寫大文件(如備份腳本)。臨時暫停非關鍵任務(如定時任務),或優化腳本邏輯(批量處理而非循環寫入)。
四、網絡優化¶
1. 減少連接浪費¶
若ss顯示大量TIME_WAIT連接(客戶端主動斷開後未釋放),臨時調整內核參數(需謹慎):
sysctl -w net.ipv4.tcp_tw_reuse=1 # 允許複用TIME_WAIT連接
sysctl -w net.ipv4.tcp_fin_timeout=30 # 縮短連接關閉超時
2. 限制連接數¶
若併發連接過多導致ss顯示ESTABLISHED持續增長,調整文件描述符限制:
ulimit -n 4096 # 臨時設置最大打開文件數
# 永久生效:vi /etc/security/limits.conf,添加 * soft nofile 4096
系統級基礎參數調整¶
Linux內核參數可通過sysctl臨時修改,需寫入/etc/sysctl.conf永久生效:
# 查看所有內核參數
sysctl -a | grep net.ipv4.tcp # 查看TCP相關參數
# 臨時修改TCP超時(示例)
sysctl -w net.ipv4.tcp_syn_retries=2 # 減少SYN請求重試次數,加快連接
# 永久生效
echo "net.ipv4.tcp_syn_retries=2" >> /etc/sysctl.conf
sysctl -p # 加載配置
注意:修改內核參數前,務必瞭解參數含義(如net.ipv4.ip_forward=1開啓路由轉發,非路由場景勿改)。
調優注意事項¶
- 先診斷,後優化:用
top/dstat定位瓶頸,避免盲目改參數。 - 不要過度調優:Linux默認配置已針對大多數場景優化,除非明確知道問題(如併發連接過多),否則無需頻繁調整。
- 先測試,後上線:在測試環境驗證調優效果,避免生產環境因參數錯誤導致服務中斷。
總結¶
Linux系統調優是“發現問題→分析原因→精準調整”的過程。從基礎工具(top/free/iostat)入手,逐步定位瓶頸(CPU/內存/IO/網絡),再針對性優化(換硬件、改參數、修代碼)。記住:性能優化沒有“一勞永逸”,定期監控(如dstat)+ 持續迭代纔是關鍵。