Memory

由 MySQL 或 Apache 引起的記憶體使用?

  • February 24, 2019

我的 vps 記憶體使用情況

(來源: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 使用共享記憶體的執行緒,而不是不共享記憶體的分叉。這應該允許您處理更多的並發訪問者。

引用自:https://unix.stackexchange.com/questions/57730