Apache HTTPS 服務間歇停止的問題
2024-02-01 開始客戶的網站就發生服務中斷的情況(其實這狀況當時應該發生好幾天了)。
主機架在 DigitalOcean 的 SGP1 上,由於 SGP1 網路設備曾有停擺快 2 天的黑記錄;所以一開始就懷疑是不是網路設備不穩。
以往的經驗,通常停止十分鐘左右就會恢復正常,但這次卻不是想像中單純。
服務大概停擺十分鐘後,就恢復正常,但是每隔一到兩小時就發生一次服務停擺,實著讓人頭疼。
一開始是毫無頭緒到底是什麼問題,也發 ticket 給 DO,DO 回應希望進一步提供資料。
懷疑過:網路設備問題、程式沒寫好、SSL 憑證問題、MySQL 資料庫問題等,大伙搞了兩天也沒離清問題點,只發現 HTTPS 受影響,但 HTTP 似乎沒受影響。可是 HTTPS 中斷服務時, HTTP 也變慢了。
大家的想法都一樣,HTTPS 和 HTTP 都是 Apache 伺服器的服務;沒道理 HTTPS 停擺,而 HTTP 正常。所以焦點又被轉移到 SSL 憑證上。
第三天開始,我終於有比較多的時間,從調 MySQL 開始搞了半天,沒什麼進展。 後來在一堆 Apache error log 中,某個停擺時點找到一條:
[Sat Feb 03 23:54:11.819500 2024] [mpm_prefork:error] [pid 8964] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
很少在搞設定的我,只好查一下資料 mpm_prefork 是什麼模組,然後網路上也沒查到上面的錯誤會造成什麼問題。 後來在 stackoverflow 找到這篇 AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting。
硬著頭皮依照建議設定 mpm_prefork.conf,心想應該就是這個問題。 一覺起來,果然有改善,再依 log 做些調整。
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 20
ServerLimit 2000
MaxRequestWorkers 1536
MaxConnectionsPerChild 10000
</IfModule>
幾天的心情低落就因為一個設定。
另一個有趣的事情,就是在 stackoverflow 找資料時,看到一篇症狀和我們遇到的差不多狀況。 但傻眼的是,他自己解答自己的問題,答案是「公司找到會設定 Apache 的人才,他弄一下設定就好了」,沒有提到任何的模組或設定...
沒有留言:
張貼留言