私のApacheは起動するとすぐにメモリ使用量が高くなります。再起動または再起動すると、このような数値が表示されます。
top - 15:37:59 up 22 min, 1 user, load average: 0.12, 0.09, 0.12
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 88.0%id, 11.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3076864k total, 1098872k used, 1977992k free, 75348k buffers
Swap: 2097148k total, 0k used, 2097148k free, 582912k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1108 mysql 20 0 859m 185m 8136 S 0.0 6.2 0:08.91 mysqld
1335 root 20 0 581m 109m 18m S 0.0 3.7 0:00.61 apache2
2064 www-data 20 0 586m 107m 12m S 0.0 3.6 0:00.16 apache2
2068 www-data 20 0 586m 107m 11m S 0.0 3.6 0:00.09 apache2
2083 www-data 20 0 586m 106m 11m S 0.0 3.6 0:00.05 apache2
2085 www-data 20 0 586m 106m 11m S 0.0 3.6 0:00.03 apache2
2081 www-data 20 0 589m 101m 7368 S 0.0 3.4 0:00.48 apache2
2086 www-data 20 0 582m 95m 4036 S 0.0 3.2 0:00.00 apache2
apache2 -Vの結果は次のとおりです。
Server version: Apache/2.4.12 (Ubuntu)
Server built: Feb 4 2015 14:21:10
Server's Module Magic Number: 20120211:41
Server loaded: APR 1.5.1, APR-UTIL 1.5.3
Compiled using: APR 1.5.1, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
最後に、apache2/mods-enabled/mpm_prefork.conf を示します。
参考までに、これは現在有効な新しい構成です。100 台のサーバーが生成されてシステムがクラッシュするのを防ぐために、ServerLimit ディレクティブを設定しました。
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 5
MaxSpareServers 5
MaxClients 50
ServerLimit 30
MaxRequestsPerChild 200
# MaxSpareServers 5
# MaxRequestWorkers 150
# MaxConnectionsPerChild 0
</IfModule>
同様の設定を使用して別のサーバーを実行していますが、トップには次のように表示されます。
top - 15:48:32 up 10 days, 14 min, 2 users, load average: 0.10, 0.06, 0.06
Tasks: 172 total, 1 running, 171 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 3078580 total, 2749928 used, 328652 free, 229412 buffers
KiB Swap: 3141628 total, 1608 used, 3140020 free. 1868332 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1286 mysql 20 0 1344940 265440 8340 S 0.0 8.6 56:22.39 mysqld
21176 www-data 20 0 428168 64900 41772 S 0.0 2.1 0:01.24 apache2
21020 www-data 20 0 429684 58164 36664 S 0.0 1.9 0:01.93 apache2
21185 www-data 20 0 425460 52332 31952 S 0.0 1.7 0:00.91 apache2
21199 www-data 20 0 425884 50604 30144 S 0.0 1.6 0:00.26 apache2
21130 www-data 20 0 423124 48396 30372 S 0.0 1.6 0:00.52 apache2
21186 www-data 20 0 422796 48296 30584 S 0.0 1.6 0:00.46 apache2
21205 www-data 20 0 422992 47608 29740 S 0.0 1.5 0:00.18 apache2
21204 www-data 20 0 422944 43576 25756 S 0.0 1.4 0:00.12 apache2
21203 www-data 20 0 424220 28016 8896 S 0.0 0.9 0:00.23 apache2
6095 root 20 0 414748 24100 14424 S 0.0 0.8 0:14.32 apache2
10 日間実行した後のことですが、数日後にシステムがクラッシュし、ログにはメモリ使用量の多い Apache プロセスが 75 個ほど生成されたことが示されていました。何が起こっているのかわかりません。2 月 17 日頃に mod_pagespeed をインストールしました。2 月 25 日頃までは問題なく動作していました。2 月 25 日以降、さまざまな問題に気付きました。
Ubuntu 12.04 LTS を実行しています。
この問題を解決するための次のステップがあれば教えていただければ幸いです。
答え1
「同様の設定を使用する」
これはまったく異なる設定であることを謙虚に提案します。チューニングの第一歩は、不要なものをすべて削除することです (Apache の場合は共有モジュール)。次に覚えておくべきことは、RSS と VSZ は Linux 上のプロセスのメモリ使用量を示す良い指標ではなく、フォークされたプロセスでは特にそうではないということです。Apache プロセスが実際に使用するメモリ量を確認するには、「free」の出力を追跡し、ps -ef | grep apache2 | wc を実行します。
いくつかのデータを収集したら、線形回帰を実行して、ServerLimitがあるべきかを計算できます。
minspareserver を maxspareservers と同じ値に設定するのはお勧めできません。
mod_pagespeedをインストールしました
mod_pagespeedはメモリとCPUを大量に消費するため、一度もないリバース プロキシを前に置かずに使用できます。