優化Apache連接數的核心目標是在服務器資源(內存、CPU)允許范圍內,提高并發處理能力,同時避免因配置不當導致資源耗盡。以下是具體優化步驟:
Apache的并發處理能力主要由MPM模塊決定,不同模式(prefork、worker、event)的參數配置差異較大,需根據服務器場景選擇。
確認當前MPM模式:
apachectl -V | grep MPM
修改MPM配置:
根據模式編輯對應配置段(如/etc/httpd/conf/httpd.conf
或/etc/apache2/mods-enabled/mpm_*.conf
):
<IfModule mpm_prefork_module>
StartServers 10 # 啟動時的子進程數
MinSpareServers 5 # 最小空閑子進程數
MaxSpareServers 20 # 最大空閑子進程數
MaxClients 150 # 最大并發連接數(關鍵參數)
MaxRequestsPerChild 1000 # 每個子進程處理的最大請求數(防內存泄漏)
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25 # 每個子進程的線程數
MaxRequestWorkers 150 # 最大并發連接數(=ThreadsPerChild×ServerLimit)
MaxConnectionsPerChild 1000
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150 # 最大并發連接數
MaxConnectionsPerChild 10000 # 更高的請求上限(減少進程重啟開銷)
AsyncWorkers 10 # 異步工作線程數(可選,提升IO密集型性能)
</IfModule>
MaxClients = (服務器總內存 - 系統預留內存) / 單個Apache進程內存占用
例如,8GB內存服務器,每個Apache進程占用約50MB,則MaxClients ≈ (8192-512)/50 ≈ 150
(需預留內存給系統和其他服務)。MaxRequestWorkers
調整(如ThreadsPerChild=25
,MaxRequestWorkers=150
則ServerLimit=6
)。KeepAlive允許客戶端通過同一個TCP連接發送多個請求,減少連接建立/關閉的開銷(HTTP/1.1默認開啟)。
KeepAlive On # 開啟KeepAlive
MaxKeepAliveRequests 100 # 單個連接最大請求數(避免長期占用連接)
KeepAliveTimeout 5 # 連接保持超時時間(秒,建議5-10)
注意:若并發量極大,可適當降低KeepAliveTimeout
(如3秒),釋放閑置連接。
Apache的連接數受系統文件描述符限制和內核網絡參數影響,需同步調整。
編輯/etc/security/limits.conf
,增加以下內容:
* soft nofile 65535 # 單個用戶軟限制
* hard nofile 65535 # 單個用戶硬限制
編輯/etc/pam.d/login
,添加:
session required pam_limits.so
驗證:
ulimit -n # 查看當前用戶的文件描述符限制
編輯/etc/sysctl.conf
,添加以下內容:
net.core.somaxconn = 65535 # 監聽隊列最大長度(避免連接被拒絕)
net.ipv4.tcp_max_syn_backlog = 65535 # SYN隊列長度(應對SYN Flood)
net.ipv4.ip_local_port_range = 1024 65535 # 客戶端可用端口范圍
net.ipv4.tcp_tw_reuse = 1 # 復用TIME_WAIT狀態的連接(減少端口耗盡)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT狀態超時時間(秒,默認60)
應用配置:
sysctl -p
通過緩存靜態內容(如圖片、CSS、JS),減少對后端服務器的請求,間接提升并發處理能力。
# 啟用mod_cache和mod_expires
LoadModule cache_module modules/mod_cache.so
LoadModule expires_module modules/mod_expires.so
<IfModule mod_cache.c>
CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
優化后需通過工具監控服務器狀態,根據實際情況調整參數:
top
(查看CPU/內存占用)、htop
(更直觀的資源監控)、netstat -antp
(查看連接數)。ab
(Apache Benchmark)模擬高并發:ab -n 10000 -c 1000 http://your-server.com/ # 10000次請求,1000并發
access.log
分析請求模式(如熱點資源、慢請求),針對性優化。mod_limitipconn
模塊,防止惡意IP占用過多連接:LoadModule limitipconn_module modules/mod_limitipconn.so
<IfModule mod_limitipconn.c>
<Location />
MaxConnectionsPerIP 50 # 每個IP最大連接數
</Location>
</IfModule>
通過以上步驟,可顯著提升Apache的并發連接數處理能力。需注意:所有參數調整都需結合服務器實際資源情況,避免過度配置導致系統崩潰。優化后務必進行壓力測試,驗證效果。