一、性能調優方向
1. 系統層面優化
- 內核參數調整
- TCP隊列與連接管理:
- net.core.somaxconn(最大連接隊列長度,建議設為65535)
- net.ipv4.tcp_max_syn_backlog(SYN隊列長度,建議65535)
- net.ipv4.tcp_tw_reuse和tcp_tw_recycle(加速TIME_WAIT連接回收)57。
- 文件描述符限制:
- 修改/etc/security/limits.conf,設置nofile為65535以上,避免“Too many open files”錯誤57。
- 臨時端口范圍:
- 擴大net.ipv4.ip_local_port_range(如1024-65535),支持更多并發連接7。
- TCP隊列與連接管理:
- 硬件與架構優化
- SSD存儲:提升靜態資源訪問速度5。
- CPU綁定:通過worker_cpu_affinity將Nginx工作進程綁定到特定CPU核心,減少上下文切換9。
2. Nginx配置優化
- 工作進程與連接數
- worker_processes:設為CPU核心數(如auto自動檢測)13。
- worker_connections:每個進程最大連接數(如10240),需結合worker_rlimit_nofile調整13。
- 緩沖區與傳輸優化
- client_body_buffer_size和client_header_buffer_size:調整請求體與頭緩沖區(如16k/4k),避免大請求導致的錯誤13。
- sendfile和tcp_nopush:啟用零拷貝傳輸,減少CPU消耗79。
- HTTP協議與SSL優化
- 啟用HTTP/2協議:listen 443 ssl http215。
- SSL優化:使用TLS 1.3、高性能加密套件(如TLS_AES_128_GCM_SHA256),并開啟會話復用15。
- 緩存與壓縮
- 靜態資源緩存:通過expires和Cache-Control頭設置瀏覽器緩存時間5。
- Gzip壓縮:減少傳輸體積,配置gzip_types包含文本、JSON、JS等格式59。
- 代理緩存:使用proxy_cache_path緩存后端響應,降低后端負載9。
- 負載均衡策略
- 根據場景選擇算法:輪詢(默認)、最少連接(least_conn)、IP哈希(ip_hash)15。
二、深度監控方案
1. 基礎監控指標
- 核心活躍指標
- Active connections(活躍連接數)、Reading/Writing(讀寫狀態連接數)。
- Accepts(總接收連接數)、Handled(成功處理數)、Requests(總請求數)610。
- 性能指標
- QPS(每秒請求數):通過Requests的增量計算610。
- 錯誤率:統計4xx(客戶端錯誤)和5xx(服務端錯誤)狀態碼占比610。
- 響應時間:通過日志中的$request_time分析平均處理耗時610。
2. 監控工具與實現
- Nginx內置模塊
- stub_status模塊:
- 配置示例:
- stub_status模塊:
location /nginx_status {
??? stub_status on;
??? access_log off;
??? allow 127.0.0.1;
??? deny all;
}
-
-
- 輸出示例:Active connections: 23 | Requests: 4550,可解析為每秒請求數、連接狀態等26。
-
- 日志分析
- 訪問日志:記錄請求時間、狀態碼、響應時間,結合ELK(Elasticsearch+Logstash+Kibana)進行可視化分析28。
- 錯誤日志:監控error.log中的警告與錯誤事件(如連接超時、SSL握手失敗)6。
- 第三方監控系統
- Prometheus+Grafana:
- 使用nginx_exporter采集指標,通過Grafana展示實時儀表盤(如QPS、連接數、錯誤率)48。
- Zabbix:自定義監控項,觸發告警(如連接數超閾值)68。
- Prometheus+Grafana:
- 高級監控模塊
- ngx_http_reqstat_module:第三方模塊,支持按域名、URL統計請求數、流量等,需重新編譯Nginx610。
三、調優與監控實踐建議
- 逐步調優:每次僅修改一個參數,通過壓測(如wrk或ab)驗證效果7。
- 監控頻率:核心指標(如QPS、錯誤率)需實時監控,日志分析可按需設置定時任務68。
- 安全與權限:限制stub_status和監控接口的訪問IP,避免信息泄露26。