web-dev-qa-db-ja.com

httpdメモリ使用量

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設定をどのように微調整するのが最善か、またはこれを引き起こしている可能性があるものを正確に診断する方法について、さらなる指針/提案はありますか?

13
James Spittal

これを「解決」するために私がやったことは次のとおりです。

  1. 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>
  1. authz_Host_modulelog_config_moduleexpires_moduledeflate_modulesetenvif_modulemime_moduleautoindex_modulenegotiation_moduledir_modulealias_modulerewrite_modulephp5_moduleを除くすべてのApacheモジュールを無効にします

  2. クライアントが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

12
James Spittal

オプション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つのプロセス間でより均等にリクエストを分配します。

2
Igor Levkov