12.0.4 ubuntuを実行している1GB VPSサーバーがあります。すべてがうまく機能します。ほとんどの場合、私のRAMの使用量は約700 MBです。ただし、毎週またはランダムにServerがメモリ不足になり、クラッシュします。 Mysqlを除くすべてのサービスを回復して開始します。
スワップメモリがないことがわかったので、256MBのスワップファイルを作成して構成します。正常に動作しますが、今回は2週間後にクラッシュします。
あなたはすでにそれを理解しているので、私は専門家ではありません。したがって、通常の操作でサーバーが大量のメモリを消費する理由についてのガイダンスが必要です。私は別の時間にそれを観察することを意味します、それは常に約700-800MBのメモリであり、負荷は安定しています。夜間などに実行されるcronはありません。いくつかのwordpress blog
がありますが、安定した負荷があり、「バルク」負荷が発生することはありません。
私はVesta Control Panelを持っています、そして、私が知っているすべてのレポートは正常です。私が気づいたことの1つは、Apacheが常に1900MBのメモリ消費を示していることです。私のシステムでは全体としてメモリが少なくなっています。 nginxをリバースWebサーバーにインストールしました[Vestaがそれをどうしてくれたのかわかりません]。それ以外はすべて良いです。Apacheは常に1900MBです。この使用量が増えると、サーバーがクラッシュするようです。
だから、私はそのApacheの使用を減らすことができる方法はありますか?現在の負荷でサーバーを安定させるために他にすべきことは何ですか。
編集:
ここでの提案に基づいて、私のMPM構成です
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
ここに私のApache2ctl -l
があります
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c
前にも述べましたが、サーバー上でWordpress(PHP)ベースのブログを実行していますが、他のWebサイトと同じ方法でNginxとApacheを使用して実行するRedmine
(Ruby on Rail)もあります。いいえ、私はpythonを使用しません。
Apache prefork MPM 256で ServerLimit
に設定すると、約256プロセスの最大メモリ使用量に設定しました。通常はそれぞれ約15-30 MBのメモリPHP5 Apacheモジュール。計算を行うと、多数のクライアントを持つ小さなサーバーで爆発することがわかっています。
代わりに、はるかに厳しい制限を設定します。例えば。
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 25
MaxClients 20
MaxRequestsPerChild 4000
</IfModule>
Apacheを再起動して、新しいMPM構成を使用します。
これにより、Apacheが5つのプロセスで起動し、新しい着信クライアント用に5つのプロセスが無料になり、10以上が未使用でハードリミットが25の場合のみプロセスをシャットダウンします。必要に応じて調整します。
または、ApacheモジュールとしてPHPではなく PHP-FPM を使用するオプションを調べてください。これははるかに効率的であり、Ubuntu 14.04のデフォルト設定でもあります。別個のPHPプロセスプールがあり、notApache prefork MPMを使用することに注意してください(正確により効率的である理由)。
これらすべての設定方法については、通常のUbuntu/Apache/PHP-FPMのドキュメントをご覧ください。
1台のサーバーでmysqlとApacheを使用するのは、本当に悪い考えです。ユーザーが多ければ多いほど、データベースへのアクセスも多くなります。データベースももちろんcpuとmemを使用して動作します。したがって、Apacheにクエリとクエリを行うように指示すると、ユーザーはイライラし、ページをリロードし、さらにクエリを追加します。私がどこに向かっているのか知っていますか?あなたの場合、同じまばらなリソースを使用する必要があるのはapaxheだけでなくmysqlでもあります。
鳥を殺すためにApache(キャノン)を使用しないでください(80人のユーザー)。 Go nginx(-npm)は、より軽量で、それほど多くのリソースを消費しません。
ほとんどのpplは、ApacheがPOSSIBLE接続のリソースを要求していることを理解していません(したがって、それを下げるヒントがあります)
このプログラムは、いつでもページを提供するように書かれています。そのため、リソースを(接続がない場合でも表示するために)使用し、それらを維持します。申し訳ありませんが、私は英語を母国語としないので、あなたが理解できる方法で説明できるといいのですが。短いバージョン80ユーザーとApacheは、小さな仮想ホストでは一致しません! nginxを使用します。これにより問題が解決するか、dbを別の小さなサーバーに移動します。