512MBのメモリを搭載したUbuntuVPSを実行しています。これは単なる開発サーバーであり、文字通りトラフィックはありません。それにもかかわらず、時々私はメモリ枯渇メッセージを受け取り続け、私のメモリ全体が使い果たされています。 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のメモリフットプリントを削減する必要があると仮定します。
PHPおよび512MBのメモリを備えたmysqlを使用した未調整のApache2サーバー(prefork mpm)への5〜10の同時接続では、メモリが一時的に不足する可能性があります。
さらに、サーバーは、bindやsendmailなど、独自のメモリ要件を持つ追加のプロセスを実行しています。
Web上のさまざまなガイド、およびここServerFaultの他の同様の質問を使用して調整する必要があります。
言うまでもなく、これは1日あたりの合計ヒット数とは関係がなく、Webサーバーへの同時セッションと関係があります。 1日20ヒットがすべて同じ秒でサーバーを強制終了しますが、1日20ヒットが1時間ごとに1ヒットに分散しても停止しません。
つまり、すべてのApache2プロセスが40MBのメモリを使用する場合(PHP5やその他のモジュールで簡単に使用できる場合)、サーバーがWebサーバー専用に400MBを使用する前に、約9または10の同時接続を許容できます。それはあなたに他のすべてのために115MBを残します。