我的 512MB Debian Rackspace VPS 上的記憶體使用情況
嗨,我在 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-fcgid
和libapache2-mod-fastcgi
. 它們是二進制兼容的,我相信,但是fcgid
更新並且與suexec
. 因此,libapache2-mod-fcgid
除非您知道libapache2-mod-fastcgi
出於某些特定原因需要,否則您應該使用。如果您閱讀有關談論的範例libapache2-mod-fastcgi
,則可能只使用它libapache2-mod-fcgid
。不要同時安裝它們——你可以這樣做,但沒有意義,只會引起混亂。你只需要一個。
基本上,Apache + PHP + wordpress 是一個巨大的記憶體豬,您需要積極實施低記憶體設置以使其在 512MB 上可靠地工作。如果您還沒有這樣做,您還應該盡可能降低 mysql 的記憶體佔用。