Apache-2.2
Apache2 程序在 512MB VPS 上佔用過多記憶體
我正在執行具有 512MB 記憶體的 Ubuntu VPS。它只是開發伺服器,因此實際上沒有流量。儘管如此,我還是時不時地收到記憶體耗盡消息,我的整個記憶體都被用完了。我試圖在 SF 瀏覽各種類似的問題,但無法真正了解沒有流量的伺服器正在消耗記憶體的情況。以下是頂部的輸出:
ps aux 的輸出如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 23572 1684 ? Ss Apr11 0:03 init root 1177 0.0 0.1 18888 1028 ? Ss Apr11 0:01 cron mysql 1189 0.0 5.6 258344 29680 ? Ssl Apr11 1:04 /usr/sbin/mysqld syslog 1202 0.0 0.1 12536 788 ? Ss Apr11 0:01 /sbin/syslogd -u syslog root 1268 0.0 0.5 49424 2684 ? Ss Apr11 0:00 /usr/sbin/sshd -D root 1305 0.0 0.4 66168 2560 ? Ss Apr11 0:15 sendmail: MTA: accepting connections root 8062 0.0 0.6 70796 3408 ? Ss 10:50 0:00 sshd: root@pts/0 root 8074 0.0 0.4 18160 2224 pts/0 Ss+ 10:52 0:00 -bash root 8134 0.0 0.6 70796 3428 ? Ss 11:37 0:00 sshd: root@pts/1 root 8146 0.0 0.4 18160 2232 pts/1 Ss 11:37 0:00 -bash root 9337 0.0 2.8 270140 15176 ? Ss 11:49 0:00 /usr/sbin/apache2 -k start www-data 9341 0.0 1.9 270272 10276 ? S 11:49 0:00 /usr/sbin/apache2 -k start root 9346 0.0 0.2 15064 1136 pts/1 R+ 11:56 0:00 ps aux bind 19665 0.0 2.5 142836 13624 ? Ssl Apr25 0:00 /usr/sbin/named -u bind
和頂部的輸出:
Tasks: 18 total, 1 running, 17 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 524288k total, 301000k used, 223288k free, 0k buffers Swap: 0k total, 0k used, 0k free, 0k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 15 0 23572 1684 1332 S 0 0.3 0:03.66 init 1177 root 18 0 18888 1028 796 S 0 0.2 0:01.17 cron 1189 mysql 18 0 252m 28m 7944 S 0 5.7 1:04.58 mysqld 1202 syslog 15 0 12536 788 592 S 0 0.2 0:01.95 syslogd 1268 root 18 0 49424 2684 2120 S 0 0.5 0:00.12 sshd 1305 root 18 0 66168 2560 880 S 0 0.5 0:15.99 sendmail-mta 8062 root 19 0 70796 3408 2656 S 0 0.7 0:00.04 sshd 8074 root 15 0 18160 2224 1548 S 0 0.4 0:00.00 bash 8134 root 15 0 70796 3428 2656 S 0 0.7 0:00.10 sshd 8146 root 15 0 18160 2232 1556 S 0 0.4 0:00.04 bash 9337 root 18 0 263m 14m 5736 S 0 2.9 0:00.08 apache2 9341 www-data 15 0 263m 10m 816 S 0 2.0 0:00.00 apache2 9397 root 18 0 70796 3408 2656 S 0 0.7 0:00.02 sshd 9409 root 15 0 12560 928 748 S 0 0.2 0:00.00 sftp-server 9410 root 15 0 70796 3428 2656 S 0 0.7 0:00.01 sshd 9422 root 18 0 12564 872 668 S 0 0.2 0:00.00 sftp-server 9425 root 15 0 19176 1188 932 R 0 0.2 0:00.00 top 19665 bind 18 0 139m 13m 2152 S 0 2.6 0:00.07 named
開箱即用的 Apache2 + PHP + mySQL 總是使用大量記憶體,即使只有少量連接也是如此。你必須調整它。您需要限制 Apache 程序的數量(假設您使用的是 mpm_prefork),並且您需要通過調整各種記憶體和其他元素來減少 mysql 的記憶體佔用。
5-10 個並發連接到未調整的 Apache2 伺服器(prefork mpm),使用 PHP 和 mysql,記憶體為 512MB,可能會導致它短暫地耗盡記憶體。
此外,您的伺服器正在執行其他程序,例如 bind 和 sendmail,它們有自己的記憶體要求。
您將不得不使用網路上的各種指南以及 ServerFault 上的其他類似問題對其進行調整。
值得一提的是,這與每天的總點擊量無關,而是與 Web 伺服器的並發會話有關。一天 20 次點擊都在同一秒內會殺死你的伺服器,一天 20 次點擊分散在每小時 1 次點擊中不會。
這麼說吧——如果每個 Apache2 程序都使用 40MB 記憶體(使用 PHP5 和其他模組可以輕鬆做到這一點),您可以容忍大約 9 或 10 個並發連接,然後您的伺服器僅將 400MB 用於 Web 伺服器。剩下 115MB 用於其他所有內容。