前言:Linux 伺服器調優核心哲學
Linux 伺服器預設無 GUI、命令列介面、設計目標:**長時間高負載穩定運行**,而非互動回應速度。調優核心:**減少不必要的資源消耗、消除瓶頸、提升吞吐量、增強可用性**。
20 大調優技巧分類速覽
| 類別 | 技巧編號 | 關鍵字 |
| 核心/IO | 1, 9 | 電梯演算法、核心參數 |
| 服務/進程 | 2, 3, 4, 5 | 禁用守護進程、關閉 GUI、清理模組、禁用控制面板 |
| 網路/協定 | 6, 10 | DNS 快取、TCP 優化 |
| 安全/加密 | 7, 8 | GPG AES256、遠端備份安全 |
| 檔案系統/儲存 | 11-20 (續) | 掛載選項、RAID、LVM、SSD、備份 |
技巧 1-10 詳細解析 (本文涵蓋範圍)
1. 調整核心 I/O 電梯演算法 (I/O Scheduler)
- 四大演算法:`noop` (虛擬化/SSD)、`deadline` (資料庫/高 IOPS)、`cfq` (桌面/多媒體)、`bfq` (低延遲互動)
- 查看目前:`cat /sys/block/sda/queue/scheduler`
- 永久生效:`grub` 參數 `elevator=deadline` 或 `udev` 規則依裝置設定
- 虛擬化客體 + SSD/快閃陣列 → **`noop` 或 `none` (多隊列裝置)** 最佳
2. 禁用不必要的守護進程 (Daemon)
| 服務 | 功能 | 停用條件 |
| apmd | 進階電源管理 | 伺服器無電池/不需休眠 |
| nfslock | NFS 檔案鎖定 | 不掛載 NFS |
| isdn | ISDN Modem 支援 | 無 ISDN 設備 |
| autofs | 自動掛載 (CD-ROM/網路) | 固定掛載點、無可移動媒體 |
| sendmail | 郵件傳輸代理 | 非郵件伺服器、用 Postfix/Exim 替代 |
| xfs | X Window 字體服務 | 無 GUI (runlevel 3) |
工具:`systemctl disable ` / `chkconfig off`。效益:釋放 50–200MB 記憶體、減少攻擊面、加快開機。
3. 關閉 GUI (Runlevel 3)
- `/etc/inittab`:`id:3:initdefault:` (Systemd: `systemctl set-default multi-user.target`)
- 需時:`startx` 臨時進入圖形介面
- 省記憶體 200–500MB、CPU 週期、顯示驅動複雜度
4. 清理不需要的模組/功能 (Apache/Nginx/PHP/資料庫)
- Apache:`LoadModule` 逐行審查,註解掉 `mod_frontpage`、`mod_cgi` (若不用)、`mod_dav` 等
- PHP:`php.ini` 禁用 `expose_php`、無用擴充套件 (`pdo_oci`, `enchant` 等)
- MySQL:`skip-name-resolve`、禁用未用儲存引擎 (`skip-archive`, `skip-federated`)
5. 禁用控制面板
- cPanel/Plesk/Webmin/phpMyAdmin 佔用 120MB+ 記憶體、開放額外埠口、增加攻擊面
- 改用:CLI 管理、Ansible/Puppet 自動化、SSH 通道臨時啟用 Webmin
- 記憶體下降 30–40% 典型
6. 改善 Exim 郵件伺服器效能:部署 DNS 快取守護進程
- `djbdns` (dnscache) / `unbound` / `nscd` / `systemd-resolved`
- 消除每次從根域遞歸查詢,降低延遲 90%+、減少頻寬、CPU
- 比 BIND 更輕量、更安全、效能更優
7. GPG 加密指定 AES256 演算法
- `gpg --cipher-algo AES256 --symmetric backup.tar.gz`
- AES256 = 256 位元金鑰、開放標準、NSA 核准機密級、無已知實用破解
- 避免預設 CAST5/3DES 弱演算法
8. 遠端備份安全鐵律
- 傳輸:`scp` / `rsync -e ssh` / `borg` / `restic` (全程加密)
- 存取:備份端**不可直接登入/刪除** (單向寫入、Append-only、WORM)
- 驗證:定期測試還原、校驗和比對、多地備份
9. 更新預設核心參數 (針對資料庫/高併發)
# /etc/sysctl.conf
kernel.shmmax = 268435456 # 32位元系統
kernel.shmmax = 1073741824 # 64位元系統 (1GB)
kernel.msgmni = 1024 # 訊息佇列識別碼數
fs.file-max = 8192 # 系統級檔案控制代碼上限
kernel.sem = "250 32000 32 1024" # 信號量: 單次最大/系統最大/每陣列/陣列數
net.core.somaxconn = 65535 # TCP 監聽佇列長度
net.ipv4.tcp_max_syn_backlog = 65535
vm.swappiness = 10 # 降低 Swap 傾向 (資料庫專用)
套用:`sysctl -p`。數值參考 IBM DB2/Oracle/PostgreSQL 官方建議。
10. TCP 優化:調整視窗大小應對長肥管道 (LFN)
- BDP (Bandwidth-Delay Product) = 頻寬 × RTT
- 10GbE 跨洲際 (RTT 150ms) → BDP ≈ 187MB → TCP 視窗需 ≥ 187MB
- `net.ipv4.tcp_rmem = 4096 87380 16777216` (min/default/max 接收緩衝)
- `net.ipv4.tcp_wmem = 4096 65536 16777216` (發送緩衝)
- `net.ipv4.tcp_window_scaling = 1` (啟用視窗縮放 RFC 1323)
- 啟用 BBR 擁塞控制:`net.ipv4.tcp_congestion_control = bbr` (Kernel 4.9+)
技巧 11-20 擴展方向 (後續實施)
- 檔案系統掛載選項:`noatime,nodiratime,barrier=0` (資料庫專用裝置)、`discard` (SSD TRIM)
- RAID 卡寫入策略:`WriteBack + BBU/FBWC` 保護、讀取預讀 `Adaptive`
- LVM 精簡佈建 + 定期 `fstrim` / `blkdiscard` 回收空間
- SSD 過度佈建 20–28%、分區對齊 4KB/1MB、避免填滿 70% 以上
- Nginx/Apache 事件模型:`epoll` / `kqueue` / `eventport`、Worker 數 = CPU 核心數
- 資料庫參數:`innodb_buffer_pool_size = 70% RAM`、Redo Log 4GB+、Binlog `ROW` 格式
- 監控三板斧:`Node Exporter + Prometheus + Grafana`、`perf`/`ebpf`/`bpftrace` 深度剖析
- 定期核心升級:LTS 核心 + 硬體啟用套件 (HWE)、測試後滾動更新
- 容器資源限制:`cgroups v2`、`memory.limit_in_bytes`、`cpu.quota` 防止噪音鄰居
- 混沌工程:`Chaos Mesh`/`Litmus` 定期注入故障驗證韌性
結語
Linux 調優無銀彈,只有**「觀測 → 瓶頸定位 → 針對性調整 → 驗證 → 持續監控」**的科學迴圈。前 10 招著眼於**減法** (關服務、降參數、精簡模組),後 10 招著眼於**架構優化** (儲存/網路/資料庫/容器/韌性)。切記:每次調整單一變數、保留基線、可回滾、有監控支撐。