Memory
由 MySQL 或 Apache 引起的記憶體使用?
(來源:fileden.com)
這是我今天在一個空閒的未完成的 cms drupal 站點上使用的螢幕截圖,除了核心之外,最多添加了 14 個模組,沒有活動或使用者。
正如你所看到的,我已經達到了我的極限,這太瘋狂了,所以我需要限制 apache、mysql 和 php 的記憶體使用,因為我的 VPS 是最小的,應該適合我目前的需求。
我的系統文件 my.cnf 沒有我在其他地方看到的參數列表,但這個文件顯然會減少記憶體的使用以及我讀過的其他內容,比如記憶體洩漏和 apache MPM 工作者與 apache prefork 哪個似乎是我所擁有的。
那麼如何在不刪除 apache 或 php5 的情況下顯著減少記憶體使用量呢?
我正在使用 mysql 版本 5.1.66,看起來像 innodb 並顯示變數 yabbit.net/mysql.txt
我懷疑您的 Apache 配置是罪魁禍首,而不是您的 MySQL 配置。目前的 MySQL 設置不應該超過大約 50MB(我認為通常甚至更低)。
但是,根據您在評論中發布的 Apache 配置以及您的 VPS 僅提供 256 MB 記憶體的事實,我看到設置為
MaxClients 256
因為 Prefork MPM對於這樣的機器來說太過分了。在我的 Debian Squeeze 網路伺服器上,我看到每個 fork 大約使用 20MB,因此大約 15 個連接已經消耗了您機器中的所有記憶體。獲得如此多的並發連接並不難,因此可能會殺死程序,或者將使用大量交換。結果:分別出現伺服器故障或服務響應緩慢。
我建議你:
- 顯著縮減您的 prefork 配置,例如:
<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 5 MaxSpareServers 15 MaxClients 15 MaxRequestsPerChild 2000 </IfModule>
並且接受這樣一個事實,即您不能為超過 8 個並發訪問者提供服務(通常每個瀏覽器有兩個客戶端連接)。這是與所選 LAMP 配置相結合的記憶體量限制。
- 遷移到 PHP-FPM,設置一個小型池並遷移到 worker MPM 甚至另一個 Web 伺服器,例如 nginx。worker MPM 使用共享記憶體的執行緒,而不是不共享記憶體的分叉。這應該允許您處理更多的並發訪問者。