我的網站有 2 台伺服器:
- 一台伺服器 256GO RAM 20c/40t 用於 MySQL
- 一台伺服器 256GO RAM 20c/40t 用於 Apache
MySQL 伺服器始終正常(CPU 使用率為 30-50%)。
但是,當我的網站開始同時連接 10,000 個訪客(每分鐘加載 5,000 個頁面)時,Apache 伺服器變得超慢。奇怪的是,這台伺服器還沒有達到極限,因為 CPU 的記憶體消耗約為 20-30%。
這是top
Apache 伺服器上的回傳結果(當網站有 10,000 個訪客時速度超慢)。
top - 22:04:17 up 22:34, 1 user, load average: 12.61, 13.59, 13.47
Tasks: 2139 total, 20 running, 2119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 28.2 us, 7.2 sy, 0.0 ni, 63.0 id, 0.0 wa, 0.0 hi, 1.6 si, 0.0 st
KiB Mem : 26410644+total, 17146396+free, 8632064 used, 84010416 buff/cache
KiB Swap: 1047548 total, 1047548 free, 0 used. 25449820+avail Mem
就好像這台伺服器的 CPU 費用有一個限制。
這是 Apache 伺服器的設定:
keepalive: Off
keepalivetimeout: 2
maxclients: 3000
maxkeepaliverequests: 1000
maxrequestsperchild: 15000
maxspareservers: 300
minspareservers: 150
serverlimit: 3000
startservers: 1000
timeout: 300
我應該比昨天更精確的是,我的 Apache 伺服器使用 128GO RAM,網站可以支援 13,000 個同時連接的訪客,然後開始變得超慢。所以我決定換256GO RAM,但結果是最糟的...
有任何想法嗎?
我正在使用WHM。
(對不起我的英文不好)
答案1
「MaxClients 指令設定了將服務的同時請求數量的限制。任何超過 MaxClients 限制的連線嘗試通常都會排隊,最多可達基於 ListenBacklog 指令的數量。一旦子程序在結束時被釋放,如果有不同的請求,則將為連接提供服務」(參考文獻1)。http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients)。
如果您更深入地查看相關文檔,您將發現如何根據以下內容管理“serverlimit”和“maxrequestsperchild”預叉/勞工MPM,以避免邁克爾漢普頓(Michael Hampton)描繪的情況(非常解釋!)。
另外,透過檢查日誌,您應該會找到一些相關證據。