硬件是Web服務器性能的底層支撐,需根據業務負載選擇合適的配置:
通過調整內核參數,優化系統資源的使用效率:
/etc/security/limits.conf
,添加* soft nofile 65535
、* hard nofile 65535
;或在systemd服務中設置LimitNOFILE=65535
。/etc/sysctl.conf
中的參數,提升TCP連接性能:
net.core.somaxconn=65535
:增加系統支持的最大TCP連接隊列長度,避免連接被拒絕。net.ipv4.tcp_max_syn_backlog=65535
:增加SYN隊列長度,應對高并發連接請求。net.ipv4.tcp_tw_reuse=1
、net.ipv4.tcp_tw_recycle=1
:啟用TIME-WAIT連接復用,減少連接關閉后的資源占用(注意:tcp_tw_recycle
在較新內核中已移除,需謹慎使用)。net.ipv4.tcp_window_scaling=1
:啟用TCP窗口縮放,提升大數據量傳輸效率。vm.swappiness=10
(默認60),優先使用物理內存。選擇高性能Web服務器并調整配置,提升請求處理能力:
worker_processes auto; # 工作進程數等于CPU核心數
worker_connections 65535; # 每個工作進程的最大連接數
keepalive_timeout 65; # Keep-Alive超時時間,減少TCP握手開銷
gzip on; # 開啟Gzip壓縮,減少傳輸數據量
gzip_comp_level 6; # 壓縮級別(1-9),平衡壓縮率與CPU消耗
MaxClients
(最大并發連接數)、KeepAliveTimeout
(Keep-Alive超時時間)等參數。ngx_http_v2_module
(Nginx)或mod_http2
(Apache)啟用HTTP/2,支持多路復用(Multiplexing),減少連接建立次數,提升傳輸效率。upstream
模塊實現負載均衡:upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
通過緩存減少重復計算和數據庫訪問,提升響應速度:
Cache-Control
、Expires
,讓瀏覽器緩存靜態資源(如圖片、CSS、JS),減少重復請求。示例:location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d; # 緩存30天
add_header Cache-Control "public, no-transform";
}
innodb_buffer_pool_size
),將常用數據和索引緩存在內存中,提升查詢速度;建議設置為物理內存的50%-70%。數據庫是動態Web應用的核心瓶頸,需重點優化:
WHERE
、JOIN
、ORDER BY
子句中的字段)創建索引,避免全表掃描;使用EXPLAIN
命令分析查詢計劃,確認索引是否被正確使用。SELECT *
(只查詢需要的字段),減少數據傳輸量;優化JOIN
操作(如小表驅動大表),避免嵌套循環;使用分頁查詢(LIMIT offset, size
),避免一次性返回大量數據。提升并發處理能力,減少等待時間:
通過監控及時發現性能瓶頸,持續優化:
top
(查看CPU、內存使用率)、vmstat
(查看系統整體性能)、iostat
(查看磁盤I/O)、netstat
(查看網絡連接)等命令,實時監控系統狀態;使用Prometheus+Grafana搭建可視化監控系統,監控Web服務器、數據庫、緩存的性能指標(如QPS、響應時間、錯誤率)。access.log
)、應用日志,找出高頻請求、慢請求(如響應時間超過2秒的請求);使用ELK Stack(Elasticsearch+Logstash+Kibana)進行日志收集、分析和可視化,快速定位性能問題。