web-dev-qa-db-ja.com

Apache2プロセスが512MBのVPSで大量のメモリを消費している

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                                                                                    
2
gentrobot

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を残します。

5
EightBitTony