web-dev-qa-db-ja.com

Linuxはいつメモリを使い果たしますか?

プロセスが予期せず停止し続ける理由を突き止めようとしています。サーバーのメモリが不足している可能性がありますが、メモリとLinuxを正しく理解しているかどうかはわかりません。

freeコマンドから次の出力を取得します(修正しようとしている問題のある同じマシンから取得):

             total       used       free     shared    buffers     cached
Mem:           991        827        163          0        107        361
-/+ buffers/cache:        358        633
Swap:            0          0          0

一番上の行は、このマシンが実際に大量のメモリを使用していることを示しています(163 Mbの空き容量のみ)。したがって、さらにいくつかのプロセスが起動すると(実行されます)、さまざまなプロセスが強制終了されるメモリ不足の状況が発生する可能性があります。

ただし、Linuxは必要に応じて使用できるメモリ内のバッファとキャッシュを最大限に活用しているため、私がもっと注意を払う必要があるのは2行目であり、これは〜633Mbが無料です。その場合、このマシンのメモリが不足する可能性は低いと思います。

では、Linuxとメモリについての私の理解を明確にし、Linuxが実際にメモリを使い果たしたときを理解するのに役立ちますか?

PS-このマシンは単一目的のマシンです-大規模なWebアプリケーションのバックグラウンドプロセスを実行します。それだけです。Webサーバーもデータベースもありません。巨大なRuby on Railsアプリがバックグラウンドプロセスとして実行されています。特定のアプリケーションタスクに対して時折cronジョブが起動し、メモリ内にRailsアプリの別のインスタンスが一時的に作成されます。

1
aaronrussell

カーネルは、ストレージから読み込まれたデータをキャッシュするために他の方法では使用されないRAMを使用します。これはバッファキャッシュと呼ばれます。バッファキャッシュはハードドライブにあるものの単なるコピーであるため、カーネルがより重要な何かのためにメモリを必要とする場合、メモリ内のそのデータのコピーを「忘れて」、それを他の何かに使用することができます。そのデータが必要になった場合は、ドライブから再読み込みするだけです。

バッファキャッシュがあり、次に通常のカーネルバッファ(tcpソケット、ルーティングテーブルなど)があることに注意してください。

したがって、最初の行の無料コマンドは次のことを示しています。合計:RAMの量、期間。使用済み:実際に価値のあるものがどれだけ含まれているか。無料:絶対に使用されていません-空ではないかもしれませんが、ゴミがあるものは何でも。共有:プロセス間で共有されるもの-主に共有ライブラリ。バッファー:通常のカーネルバッファー。キャッシュ:表面上は、バッファキャッシュ。

2行目は、「実際に使用されている」ものを示しています。のように、結果なしで忘れることができないラムにあるもの。また、2行目の「空き」フィールドは、未使用のRAMとバッファキャッシュの合計です。

最後の行にはスワップスペースが含まれます。カーネルがメモリ内の重要な情報を書き込むことができるストレージスペースであり、そのメモリ位置を他の目的に使用できます。ただし、スクリーンショットでは、何も構成されていません。

現在、1GBのうち約360MBを使用しているようです。メモリ不足が心配または疑われる場合は、カーネルログメッセージを確認してください。カーネルは、メモリが完全に不足し、何かをしなければならない状況に達したときにログに記録します。 1つのプロセスを強制終了することで状況を救うことができることを期待して、メモリ不足キラーを呼び出します。

私は当初、これはVPSだと思っていました。物理サーバーであり、余分なRAMを追加できない場合は、スワップスペースの追加を検討してください。

それ以外の場合は、/ var/logでログメッセージを確認するか、コマンドラインでdmesgを使用して最新のカーネルメッセージを確認します。

3
etherfish