軽い設定でも VPS のメモリが消費される

軽い設定でも VPS のメモリが消費される

Linux 初心者です。Ubuntu 11.04 サーバーに 256MB の VPS があり、「free -m」を実行すると、結果にすべてのメモリが使用されていることが表示されます (2 行目のバッファ/キャッシュを含む)。実行中の Apache プロセスが 5 つしかなく、それぞれが約 20MB を消費していることを考えると、これは非常に奇妙です。MYSQL は 30MB を消費しています。私の知る限り、および「top」によると、他にメモリを大量に消費するプロセスは動作していません。

関連する可能性のある設定:

PHP memory_limit = 32M
MYSQL key_buffer = 16M
Prefork MPM Maxclients = 10

これらの設定を確認したとき、当然 maxclients が高すぎると思ったので、5 に切り替えてみました。メモリが 100% 使用されていると表示されるだけでなく、現時点では私以外のトラフィックがないにもかかわらず、Web サイトの読み込み速度が大幅に低下しています。これは理解できません。単一の Apache プロセスが、2 秒に設定した「KeepAliveTimeout」ウィンドウ内で受信したクライアントからのすべてのリクエストを処理すると思っていました。最初の構成では maxclients が 10 で、ページの読み込み時間は約 0.3 ミリ秒なので、単一のプロセスで問題なく処理できるはずですが、正しいでしょうか?

そこで次に、maxclients を極端なレベル 1 に設定しました。メモリの使用率は依然として 100% で、サイトの読み込みはひどく遅くなっています。私はまったくの初心者で、途方に暮れています。基本的なサーバー設定に関する多くのチュートリアルを読んできたので、問題ないはずです。

助けてください!

Edit:
             total       used       free     shared    buffers     cached
Mem:           256        256          0          0          0          0
-/+ buffers/cache:        256          0
Swap:            0          0          0

答え1

これは、Linux がメモリの大部分をキャッシュとして使用し、必要に応じてその一部を、実行するアプリケーションに返すためです。

だから慌てないでください。問題ありません。MaxClients をデフォルトに戻してください。

編集: OpenVZ で実行しているようです。以下の David Schwartz の回答を参照してください。

答え2

スワップがないので、OS が物理メモリを節約するのは非常に困難です。基本的に、アクセスされる可能性は低いが、アクセスされないことが証明できないデータを置く場所はありません。そのため、RAM に保持する以外に選択肢はありません。

たとえば、サーバーの起動時に開始されるが、一度もアクセスされないサービスについて考えてみましょう。このサービスは、再配置されるライブラリにリンクしている可能性があります。この再配置により、メモリ内のコード ページがダーティになります。起動時に、メモリが割り当てられ、その内容が変更される可能性があります。スワップを使用すると、サービスが長時間実行されなかった後、またはメモリが不足しているときに、これらのページをメモリから削除してスワップに保存できます。(ほとんどの場合、取得されることはありません。しかし、カーネルはそのようなリスクを冒すことはできません。次のようなサービスについて考えてみましょうssh。)

スワップがなければ、たとえ何日間もアクセスされていなかったとしても、カーネルはダーティ ページを削除する方法がありません。そのため、貴重な物理メモリが役に立たないジャンクでいっぱいになります。

アップデート: どうやら、これは OpenVZ のアーティファクトです。スワップがあり、表示されているメモリの数値は無意味です。パフォーマンスの問題は、制御できる何かが原因である場合とそうでない場合があります。

関連情報