
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に減少します。これは次のとおりです。大きい走る。
私は現在アクティブな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 AWSm1.small
インスタンス)には1.7 Gb
RAMがあります。したがって:
設定を調整するための最良の方法httpd
、またはこの問題の原因を正確に診断する方法に関する追加のガイドライン/アドバイスはありますか?
答え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>
、、、、、、、、、、を除くすべてのApacheモジュールを無効にします
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
mod_ssl
クライアントは何も使用しないので、このパッケージを削除してくださいhttps://
。
この新しい設定がしばらく実行されたら、もう一度報告して問題が解決するかどうかを確認します。
以下はいくつかのインスピレーションを得たものです。http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/そしてhttp://www.activoinc.com/downloads/httpd.conf-magento
答え2
オプションが残念です。サブあたりの最大リクエスト数定義された数の要求の後にプロセスのリサイクルが可能であるため、メモリリークが存在しますが、もはや表示されないため、お客様の場合に役立ちます。
また:最大クライアント数 = サーバー制限 * サブスレッドあたりのサブスレッド数
あなたの場合、同時ユーザーが7人(MaxClients = 7)しか必要ない場合(ダウンタイムを最小限に抑えることができない場合に備えて)、2つのプロセスで十分であるため、構成は次のとおりです。
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 20
ServerLimit 2
MaxClients 8
ThreadsPerChild 4
MaxRequestsPerChild 4000
</IfModule>
私は使う最大顧客数8、2つのプロセス間で要求をより均等に配布するためのものです。
答え3
インメモリコンピューティング
他の回答では、すでに値を設定する方法について説明しました。これを行うには、システムのさまざまな要素のメモリ使用量を計算する必要があります。
私はメモリコンピューティングの問題を解決しようとしていますが、これは多くの人に役立ちます。
ps
プロセスのみを表示します。RSS
値として使用したい場合は良いツールです。RSS
(常駐セットサイズ)が共有メモリ全体(共有ライブラリ)を追加し、すべてのプロセスを繰り返して報告されたメモリを超えています。
htop
あるいは、top
デフォルトでは、特定のエンティティのすべてのプロセスだけでなく、すべてのスレッドも表示します。プロセスを表示するには、クリックするだけでHスレッド表示とスレッド表示なしを切り替えることができます。
スエム
メモリ使用量を計算するためのより良いツールを使用するには、次のものを使用できます。smem
apt install smem
pss
より信頼できる価値を提供します。
提供された価値
- RSS(常駐セットサイズ)
- プロセスに割り当てられたRAMメモリには共有メモリが含まれています(冗長)。一度割り当てられ、複数のプロセスで使用される共有ライブラリRSSは、メモリ使用量を報告します。
- PSS(比例セットサイズ)
- すべてのプロセスに共有メモリをパーセントで割り当てます。
- 同じ共有ライブラリを使用する4つのプロセス、各プロセスは計算に共有メモリの25%を使用します。
- RSSと比較して、RSSはプロセスごとに共有メモリを100%計算します。
- USS(ユニークなスーツサイズ)
- USS と PSS は smem の著者 Matt Mackall が提案した用語であり概念である。
いくつかのオプション
- k:メモリ(MB)
- t:下部に総メモリを表示