溫馨提示×

怎樣調整CentOS Apache內存使用

小樊
44
2025-09-30 18:31:10
欄目: 智能運維

一、前置準備:確認當前內存使用情況

在調整前,需先了解Apache及系統的內存占用現狀,為后續參數設置提供依據:

  • 查看Apache進程內存占用:使用ps aux | grep httpd命令,重點關注%MEM(內存占用百分比)和RSS(實際內存使用量,單位KB)列,識別高內存進程。
  • 實時監控系統內存:通過top命令(按M鍵按內存排序)或free -m命令,查看系統總內存、已用內存、剩余內存及Swap使用情況。

二、核心調整:修改Apache配置文件(MPM模塊參數)

Apache的內存使用主要由**MPM(多處理模塊)**決定,CentOS默認使用prefork(進程模式,適合兼容性場景),高性能場景建議切換至worker(線程模式)或event(異步線程模式)。需根據模塊類型調整對應參數:

1. 切換MPM模塊(可選但推薦)

編輯Apache配置文件(/etc/httpd/conf/httpd.conf/etc/apache2/apache2.conf),注釋prefork模塊,啟用workerevent模塊:

# 注釋prefork模塊(若存在)
# <IfModule mpm_prefork_module>
#     ...
# </IfModule>

# 啟用worker模塊(示例配置)
<IfModule mpm_worker_module>
    StartServers             2       # 啟動時的工作進程數(每個進程包含多個線程)
    MinSpareThreads         25       # 最小空閑線程數
    MaxSpareThreads         75       # 最大空閑線程數
    ThreadLimit             64       # 單個進程的最大線程數(需≤ThreadsPerChild)
    ThreadsPerChild         25       # 每個工作進程創建的線程數
    MaxRequestWorkers      150       # 最大并發請求數(=ThreadsPerChild×StartServers)
    MaxConnectionsPerChild   0       # 每個進程處理的請求數(0=無限制,建議設為1000~10000防內存泄漏)
</IfModule>

注:worker模式通過線程處理請求,內存占用遠低于prefork(每個線程共享進程內存)。

2. 調整prefork模塊參數(若堅持使用)

若因兼容性需保留prefork模塊,需調整以下參數平衡并發與內存:

<IfModule mpm_prefork_module>
    StartServers             5       # 啟動時的進程數(根據負載調整)
    MinSpareServers          5       # 最小空閑進程數(避免頻繁創建進程)
    MaxSpareServers         10       # 最大空閑進程數(避免內存浪費)
    MaxRequestWorkers      150       # 最大并發進程數(關鍵參數,需匹配內存容量)
    MaxConnectionsPerChild 1000      # 每個進程處理的請求數(防內存泄漏)
</IfModule>

3. 優化KeepAlive設置

KeepAlive可減少TCP連接開銷,但會增加內存占用(長連接保持進程/線程活躍)。調整以下參數:

KeepAlive On                     # 啟用KeepAlive
MaxKeepAliveRequests    100      # 每個連接的最大請求數(避免單個連接占用過久)
KeepAliveTimeout        5        # 連接保持時間(秒,建議5~10秒)

注:若網站靜態資源多(如圖片、CSS),可適當增大MaxKeepAliveRequests;若動態請求多,建議縮短KeepAliveTimeout。

三、輔助優化:減少內存占用的其他措施

1. 禁用不必要的模塊

Apache默認加載大量模塊,禁用未使用的模塊可釋放內存。執行以下命令查看已加載模塊:

httpd -M  # 或 apachectl -M

禁用模塊(如status、autoindex):

LoadModule status_module modules/mod_status.so  # 注釋掉此行(在配置文件中)

2. 啟用緩存模塊

通過緩存靜態資源(HTML、CSS、JS)減少重復請求,降低內存負載:

# 啟用mod_cache和mod_disk_cache
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_disk_cache.so

# 配置緩存路徑和大小
CacheEnable disk /
CacheRoot "/var/cache/apache2"
CacheDirLevels 2
CacheDirLength 1

3. 調整內核參數(可選)

通過修改內核參數優化內存管理:

# 降低vm.swappiness(減少Swap使用,優先用物理內存)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

# 允許內存過量使用(避免OOM Killer頻繁終止進程)
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p

四、應用更改與持續監控

  • 重啟Apache服務:修改配置后,執行sudo systemctl restart httpd(CentOS 7/8)或sudo systemctl restart apache2(部分版本)使更改生效。
  • 監控內存使用:調整后通過top、htopapachetopsudo yum install apachetop)實時查看內存占用,若MaxRequestWorkers設置過高導致內存耗盡,需逐步降低該值至系統穩定。

注意事項

  • 內存匹配MaxRequestWorkers需根據服務器內存計算(如每進程占用50MB,1GB內存建議設置為1024MB/50MB=20,留足系統預留內存)。
  • 測試環境驗證:生產環境調整前,務必在測試環境模擬負載,避免參數設置不當導致服務崩潰。
  • 日志分析:定期檢查/var/log/httpd/error_log(或error.log),關注內存泄漏或配置錯誤提示。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女