httpd
(_Apache/2.2.29
_)のメモリ使用に問題があります。
時間の経過とともに、httpd
プロセスのメモリ使用量は、最終的に100%になるまで増加します。
httpd
を最後に再起動したのは、約24時間前です。 _free -m
_からの出力は次のとおりです。
_[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 1415 239 0 202 424
-/+ buffers/cache: 788 866
Swap: 1023 4 1019
_
確実にhttpd
であることを証明するために、httpd
を再起動して_free -m
_を再度実行しました。
_[ec2-user@www ~]$ Sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 760 894 0 202 360
-/+ buffers/cache: 197 1457
Swap: 1023 4 1019
_
したがって、Apacheを再起動すると、空きメモリが239 Mbから894 Mbになります。これは、big飛躍のようです。
私は現在有効になっているApacheモジュール(かなりたくさんあります)と無効化/削除された_mod_wsgi
_と_mod_Perl
_(PHPを実行しているこのサーバーにはどちらも必要ありません)のリストを調べてきました。ベースのWebアプリケーション-特にMagento)。
https://servercheck.in/blog/3-small-tweaks-make-Apache-fly に基づいて、_ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
_を実行し、次の出力を取得しました。
_[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 15.1328 MB 118.09 MB 127.449 MB 129.059 MB 117.734 MB 113.824 MB 125.062 MB 123.922 MB 119.855 MB 108.066 MB 136.23 MB 114.031 MB 113.27 MB 110.695 MB 102.113 MB 113.234 MB 186.816 MB 118.602 MB 0.835938 MB
_
MaxClients
の他の推奨診断ツールであるps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
を実行すると、次の結果が返されます。
_[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
_
このサーバー(Amazon AWS _m1.small
_インスタンス)には、RAMの_1.7 Gb
_があります。したがって、したがって:
httpd
設定をどのように微調整するのが最善か、またはこれを引き起こしている可能性があるものを正確に診断する方法について、さらなる指針/提案はありますか?
これを「解決」するために私がやったことは次のとおりです。
MaxClients 7
を設定((1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
に基づく)したがって:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 7
MaxRequestsPerChild 4000
</IfModule>
authz_Host_module
、log_config_module
、expires_module
、deflate_module
、setenvif_module
、mime_module
、autoindex_module
、negotiation_module
、dir_module
、alias_module
、rewrite_module
、php5_module
を除くすべてのApacheモジュールを無効にします
クライアントがmod_ssl
をまったく使用していないため、https://
パッケージを削除します。
この新しい構成がしばらく実行されたら、問題が解決するかどうかを確認するために報告します。
ここからいくつかのインスピレーションが借りられました: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ and http://www.activoinc.com/downloads/httpd.conf-magento
オプションMaxRequestsPerChildは、定義された数の要求の後にプロセスのリサイクルを可能にするため、あなたのケースで役に立ちました。メモリリークはありますが、もう見えません。
さらに:MaxClients = ServerLimit * ThreadsPerChild
あなたの場合、7人の同時ユーザー(MaxClients = 7)だけが必要な場合、2つのプロセスで十分であり(ダウンタイムを最小限にできない場合に備えて)、configは次のようになります。
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 20
ServerLimit 2
MaxClients 8
ThreadsPerChild 4
MaxRequestsPerChild 4000
</IfModule>
私はMaxClients 8を使用して、2つのプロセス間でより均等にリクエストを分配します。