一、進程管理(MPM配置)
CentOS上Apache默認使用prefork MPM(多進程模型),每個請求由獨立進程處理,內存消耗高且并發能力有限。若服務器CPU核心數較多,應切換至event MPM(支持多線程+事件驅動),其內存占用更低、并發處理能力更強(尤其適合靜態內容和長連接)。需調整的關鍵參數包括:
StartServers:啟動時的進程數(根據CPU核心數設置,如4核可設為5-8);MinSpareThreads/MaxSpareThreads:空閑線程池的最小/最大數量(如50-250);MaxRequestWorkers:最大并發請求數(需結合服務器內存計算,如每進程占用10MB內存,1GB內存可設為800-1000);MaxConnectionsPerChild:每個進程處理的最大請求數(設為0表示無限制,但建議設為1000-5000以避免內存泄漏)。二、模塊管理
加載不必要的模塊會增加內存消耗和CPU負載。應禁用不常用模塊(如mod_php(若使用PHP-FPM替代)、mod_cgi、mod_autoindex、mod_status等),僅保留必需模塊(如mod_rewrite、mod_deflate、mod_expires)??赏ㄟ^httpd -M命令查看已加載模塊,用LoadModule指令注釋掉不需要的模塊。
三、靜態資源處理
靜態資源(圖片、CSS、JS)的處理會占用大量CPU和I/O。需通過以下方式優化:
mod_expires模塊設置靜態資源過期時間(如CSS/JS緩存30天,圖片緩存1年),減少重復請求;mod_deflate模塊對靜態資源進行Gzip壓縮(減少傳輸數據量,提升加載速度);四、KeepAlive設置
KeepAlive可減少TCP連接建立/關閉的開銷,但設置不當會導致資源占用過高。需合理配置:
KeepAlive On:啟用長連接;MaxKeepAliveRequests:每個連接的最大請求數(設為100-200,避免單個連接占用過多資源);KeepAliveTimeout:連接保持時間(設為5-10秒,避免空閑連接占用進程)。五、內存與CPU資源
MaxRequestWorkers設置過高,會導致內存耗盡,引發頻繁的swap(嚴重降低性能)。需根據服務器內存計算合適的MaxRequestWorkers(公式:可用內存 / 每個Apache進程內存占用,如1GB內存、每個進程占用10MB,則MaxRequestWorkers約80-100);六、磁盤I/O
頻繁的磁盤讀寫(如日志記錄、靜態文件訪問)會成為瓶頸。需優化:
rotatelogs工具實現日志輪轉(避免單個日志文件過大);mod_cache的緩存路徑)放在SSD或高性能存儲上;七、網絡配置
HostnameLookups Off,避免Apache對客戶端IP進行DNS查詢(增加延遲);/etc/sysctl.conf中的內核參數(如net.ipv4.tcp_tw_reuse = 1(重用TIME_WAIT連接)、net.core.somaxconn = 1024(增加監聽隊列長度)),提升網絡吞吐量。八、監控與調優工具
使用工具實時監控性能,定位瓶頸:
top(查看CPU/內存占用)、vmstat(查看I/O和進程狀態)、ss(查看TCP連接狀態);apachetop(實時查看請求處理情況)、mod_status(查看Apache模塊狀態和性能指標);ab(Apache Benchmark,測試并發處理能力)、wrk(更強大的壓力測試工具)。