如何增加 Apache Web Server 可以承受的請求量?

如果有有大流量的訪問需求,那麼你就會需要了解如何調整 Apache Web Server 以及作業系統的設定。

Apache MPM 模式

首先你可以先透過指令 apache2ctl -V | grep MPM 查看目前你的 Apache 是使用哪一種多重處理模組 (Multi-Processing Module, MPM)。有可能的選項會是「Event」和「Prefork」

Apache Prefork 模式

這個是傳統的穩定模式,在 prefork 模式下,Apache 會啟動多個子進程 (process),每個子進程只處理一個連線。當有新的連線進來時,就會由主進程派發給其中一個子進程處理。這樣的模式比較穩定,因為每個子進程都獨立運作,避免一個連線的問題影響到其他連線,但同時也較耗費資源。

修改 /etc/apache2/mods-enabled/mpm_prefork.conf 檔案

MaxRequestWorkers 4000
ServerLimit 4000

Apache Event 模式

這個是 Apache 2.4 版本預設的新模式,在 event 模式下,Apache 則是在主進程中啟動多個子執行緒 (thread),每個子執行緒可以同時處理多個連線。當有新的連線進來時,就會由主進程派發給其中一個子執行緒處理,當該子執行緒需要等待 I/O 操作時,就會將控制權交還給主進程,讓其他子執行緒繼續處理其他連線。這樣的模式比較節省資源,因為多個連線可以共享同一個子執行緒,但同時也比較複雜,需要處理多執行緒間的同步和競爭問題。

修改 /etc/apache2/mods-enabled/mpm_event.conf 檔案

MaxRequestWorkers 4000
ServerLimit 160

修改完成後重新啟動 Apache

service apache2 restart