Mysql

我的 512MB Debian Rackspace VPS 上的記憶體使用情況

  • May 11, 2012

嗨,我在 512MB Debian VPS 上執行 Apache2/PHP5/MYSQL 來為 Wordpress 站點提供服務。該網站非常繁忙,每天可能有超過 1000 次訪問。該部落格是一個提供圖像、文本並允許評論的新聞部落格。自從遷移到 VPS 後,2 天前,由於記憶體問題,該站點已關閉兩次。我已經執行了 Top 並得到了這個:

Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  0.1%sy,  0.0%ni, 97.2%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    517980k total,   458876k used,    59104k free,    12900k buffers
Swap:  1044216k total,     9060k used,  1035156k free,    87592k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
14087 www-data  20   0  302m  42m 3880 S   11  8.3   0:03.67 apache2
14086 www-data  20   0  299m  38m 3896 S    5  7.7   0:03.56 apache2
13779 mysql     20   0 68240  11m 6572 S    1  2.3   0:03.93 mysqld
14455 john      20   0 19072 1316 1000 R    0  0.3   0:00.13 top
   1 root      20   0  8356  604  572 S    0  0.1   0:00.42 init

我嘗試優化 Mysql 和 Apache,但 Apache 似乎仍然佔用了大量記憶體——302M 虛擬記憶體和每個程序 42M。

  • 這是正常的嗎?
  • 我能做些什麼來減少 Apache 的負載嗎?
  • 遷移到 worker-mpm 會有很大的不同嗎?

謝謝

更新

遷移到 worker mpm 後,我發現當伺服器幾乎空閒時使用的記憶體有所增加。但這是我在網站上發布故事時來自 Top 的讀數 -

Tasks: 237 total,   2 running, 230 sleeping,   0 stopped,   5 zombie
Cpu(s):  3.0%us,  1.1%sy,  0.0%ni, 29.8%id, 66.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1042268k total,   764492k used,   277776k free,     6304k buffers
Swap:  2096472k total,  1275928k used,   820544k free,    49472k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13520 www-data  20   0  265m  50m 4852 R   10  5.0   0:00.60 php-fcgi-wrappe
13282 www-data  20   0  246m  28m 2576 D    5  2.8   0:00.96 php-fcgi-wrappe
13081 www-data  20   0  247m  29m 2620 D    4  2.9   0:00.45 php-fcgi-wrappe
 953 mysql     20   0  198m  17m 2832 S    3  1.8   4:34.19 mysqld
13517 www-data  20   0  254m  40m 4620 S    3  4.0   0:00.46 php-fcgi-wrappe
13560 www-data  20   0  250m  36m 3380 S    1  3.6   0:00.32 php-fcgi-wrappe
13290 www-data  20   0  253m  35m 3712 D    1  3.5   0:01.08 php-fcgi-wrappe
13557 www-data  20   0  249m  36m 3300 S    1  3.5   0:00.32 php-fcgi-wrappe
13221 www-data  20   0  250m 9932 2008 D    1  1.0   0:00.68 php-fcgi-wrappe
13594 john      20   0 19208 1468 1000 R    1  0.1   0:00.05 top
 655 root      20   0  9140  996  876 S    0  0.1   0:01.39 xe-daemon
13232 www-data  20   0  197m 2876 1008 D    0  0.3   0:00.59 php-fcgi-wrappe
13281 www-data  20   0  134m 1772  516 D    0  0.2   0:00.03 php-fcgi-wrappe
13294 www-data  20   0  196m 2748  924 D    0  0.3   0:00.44 php-fcgi-wrappe
13296 www-data  20   0  212m 2412  892 D    0  0.2   0:00.57 php-fcgi-wrappe
15262 www-data  20   0  482m 6128 1288 S    0  0.6   0:15.39 apache2
   1 root      20   0  8356  600  572 S    0  0.1   0:01.02 init

如您所見,有很多程序在執行,Apache 只有 6MB,PHP-FCGI-Wrapper 相當大,而且數量很多。但有趣的是,我的整體可用記憶體比系統很少或什麼都不做時要多。為什麼是這樣?我還能做些什麼來減少正在使用的記憶體量嗎?我讀到 Nginx 是另一種選擇,但我已經執行了 W3 Total Cache 外掛、PHP APC、Mysql 查詢記憶體和 Cloudflare。Nginx 會幫助進行此設置嗎?

謝謝

是的,這很正常。我假設您正在執行 prefork mpm ( mpm_prefork_module ),在這種情況下,每個 Apache 程序都會載入所有庫和模組。您的第一步應該是將它們減少到絕對最低限度。然後,您需要計算出您可以負擔多少 Apache 程序並適當地設置您的 mpm 限制。

假設您還沒有這樣做,您可能需要考慮使用 worker mpm ( mpm_worker_module ),但這需要額外的工作,因為 PHP 不是執行緒安全的。這通常意味著您最終需要將 PHP 作為 CGI 執行(使用類似 FastCGI 的東西)。

我看到你正在使用 Debian。Debian 帶有兩個 FastCGI 模組,分別是libapache2-mod-fcgidlibapache2-mod-fastcgi. 它們是二進制兼容的,我相信,但是fcgid更新並且與suexec. 因此,libapache2-mod-fcgid除非您知道libapache2-mod-fastcgi出於某些特定原因需要,否則您應該使用。如果您閱讀有關談論的範例libapache2-mod-fastcgi,則可能只使用它libapache2-mod-fcgid

不要同時安裝它們——你可以這樣做,但沒有意義,只會引起混亂。你只需要一個。

基本上,Apache + PHP + wordpress 是一個巨大的記憶體豬,您需要積極實施低記憶體設置以使其在 512MB 上可靠地工作。如果您還沒有這樣做,您還應該盡可能降低 mysql 的記憶體佔用。

引用自:https://serverfault.com/questions/387010