1. 調整Apache MPM模塊配置
Apache的并發處理能力核心取決于**MPM(多處理模塊)**的選擇與配置。Ubuntu下需先禁用默認的mpm_prefork
(適合靜態內容、線程不安全場景),啟用更高效的mpm_worker
(多線程+進程混合模型)或mpm_event
(事件驅動,優化長連接):
sudo a2dismod mpm_prefork # 關閉prefork
sudo a2enmod mpm_worker # 開啟worker(或mpm_event)
sudo systemctl restart apache2
mpm_worker
參數(以150并發為例):/etc/apache2/mods-enabled/mpm_worker.conf
,調整以下參數:<IfModule mpm_worker_module>
StartServers 2 # 啟動時的進程數
MinSpareThreads 25 # 最小空閑線程數
MaxSpareThreads 75 # 最大空閑線程數
ThreadsPerChild 25 # 每個進程的線程數
MaxRequestWorkers 150 # 最大并發請求數(=進程數×線程數)
MaxConnectionsPerChild 0 # 每個進程處理的請求數(0=無限制)
</IfModule>
注:mpm_event
配置類似,但更適合長連接(如WebSocket),可將MaxConnectionsPerChild
設為非零值(如1000)以避免內存泄漏。2. 優化系統資源限制
Apache的并發處理受限于系統的文件描述符和TCP連接限制,需調整以下參數:
/etc/security/limits.conf
,添加:* soft nofile 65535
* hard nofile 65535
修改/etc/pam.d/login
,添加:session required pam_limits.so
/etc/sysctl.conf
,添加:net.ipv4.tcp_tw_reuse = 1 # 復用TIME-WAIT狀態的連接
net.core.somaxconn = 4096 # 增加監聽隊列長度
生效配置:sudo sysctl -p
3. 啟用緩存與壓縮模塊
減少重復請求和傳輸數據量,提升并發處理效率:
sudo a2enmod cache cache_disk
編輯/etc/apache2/mods-enabled/cache_disk.conf
,配置緩存目錄:<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache2/mod_cache_disk
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
</IfModule>
sudo a2enmod deflate expires
編輯/etc/apache2/mods-enabled/deflate.conf
,添加壓縮類型:<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
</IfModule>
4. 調整KeepAlive參數
允許客戶端復用TCP連接,減少連接建立的開銷(適用于HTTP/1.1):
編輯Apache主配置文件(/etc/apache2/apache2.conf
),添加:
KeepAlive On # 開啟KeepAlive
MaxKeepAliveRequests 100 # 單個連接最大請求數
KeepAliveTimeout 5 # 連接保持時間(秒)
5. 使用負載均衡與反向代理
通過分發請求到多個Apache實例,提升整體并發處理能力:
sudo a2enmod proxy proxy_balancer lbmethod_byrequests
/etc/apache2/sites-available/balancer.conf
):<Proxy balancer://mycluster>
BalancerMember http://backend1.example.com loadfactor=3
BalancerMember http://backend2.example.com loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
6. 監控與持續調優
使用工具監控性能,根據實際情況調整參數:
htop
(查看CPU/內存使用)、netstat -tulnp
(查看連接狀態)、apachetop
(查看請求速率)。ab
(ApacheBench)模擬并發請求,評估優化效果:ab -n 1000 -c 100 http://your-server-ip/
注:-n
表示總請求數,-c
表示并發數。