原問題為『不知道有沒有人遇過在虛擬主機上,只要一段時間就變很慢,但從GA上看到的使用者只有幾個人,必須刪除mysql的user重新建立新的user連線才恢復正常,請問這是什麼原因造成的呢?要如何排除?』
首先要了解虛擬主機的種類
- VirtualHost 型。通常在便宜的主機上。該主機所有資源皆共用。CPU/RAM/SSD/網路/DB 任何一個網站有超大的使用量時皆會影響其它人的網站。
- VPC 共享型。也是出現在較便宜的主機上。基本上 CPU/RAM 為共享。也會因同台主機的其它 VPC 的使用狀況而『被』影響。
- VPC 專用型。價格較貴。但所有資源會被獨立分配。較不會有『被』同台主機上的 VPC 所影響。
問題解析
- GA4 數字少
- 清掉 mysql 上的連線可緩解
- 都是發生在高併發時
其它人回應
PHP設定不正確或是網站有錯誤有可能導致記憶體無法釋放,長期下來就會累積直到滿了
基本上這是亂說。主機的記憶體滿了一進後台就會噴 500 錯誤。不會讓你有變慢的感覺
可能是你有舊的連接池沒釋放?
WordPress + MySQL 不會有連接池(Connection Pool)?這也是亂說。MySQL 可設定 max connections 但沒有 Connection Pool 這功能。我猜回答的人沒弄清楚兩者之差。
個人說明
- GA4 數字少 表示活人上線少很。但不代表沒機器人/AI爬蟲/漏洞掃描機器人 這些非人的行為仍會造成或建立新的連線。
- 清掉 mysql 上的連線可緩解。表示連線可能真的爆了。MySQL default 都有設定 100 的連線。一個網站要有 100 個同時連線其實算高流量了。除非那台主機真的有夠慢。不能依我管理的經驗 100 個最大連線其實都可撐 GA 30 分數字上萬都都不是問題。
- 都是發生在高併發時。比較有可能是資料庫問題。如果是 php-fpm 問題,在連線時 php-fpm 就會噴 500 錯誤。而不是等待資料庫回應。
結論
由於發問者的資訊並不夠多讓我足以下問題點。不過仍給了可能的方向。其實網路上發問是要有技巧的。發生的問題人事時地物最好有圖片或log。這樣有意願幫忙的人才會比較正確的指出問題點,而不是大家一直猜。