2台のサーバーを実行していますUbuntu 12.04
(GUI /デスクトップなし)。Canonicalのクラウドイメージ存在するAmazon EC2
。 1つはmicro
RAM 613MB
、もう1つはRAMメディアです3.75GB
。
私はただopcode シェフボックスにインストールすると、micro
大きなボックスに2048 MBのメモリで初期化されたJavaアプリケーション/ SOLRインデックスがあります。
JAVA_OPTIONS="-server -Xms2048m -Xmx2048m -XX:+UseParallelGC -XX:NewRatio=5"
chef
マイクロボックスでしばらく実行した後に新しいプログラムをインストールしたり、同様のプログラムを起動しようとすると、タスクの完了に空きメモリが不足しているというエラーメッセージが表示されますRabbitMQ
。Apache2
大規模なシステムでは、メモリが不足しているかシステムがオンになっているときにJavaアプリケーションが定期的にクラッシュするようです。
free
/コマンドを使用すると、free -m
実際に使用可能なメモリがあまりないことがわかります。この時点で、通常はメモリを「消去する」ためにシステムを再起動する必要があります。
ある時点が過ぎると、メモリが自動的に解放されるか、「削除」されなければならないように見えます。または、手動で実行する必要がある場合は、メモリをより効率的に解放/整理/管理するより良い方法があるかもしれません。
システムメモリを手動で確保/消去する方法はありますか?メモリを自動的に確認/消去するツールはありますか?
答え1
必要再起動もちろん、あまり意味はありません。記憶がいっぱいなら、それは間違いなくいっぱいになるでしょう。もの、プロセス(Javaアプリケーションなど)を停止すると、そのメモリが解放されます。
ただし、同じアプリケーションを再起動するためにこれを行う必要がある場合は、次の問題があります。なぜその結果、プロセスは大量のメモリを消費します。多くの場合、成長し続け、何も解放しないプロセスは、内部のバグが原因でメモリリークが発生すると言うことができます。
つまり、最初にすべきことは理解することです。具体的にどんなソフトウェアですか?問題の原因は何ですか?このタイプのツールはtop
しばしばこの目的に使用されます。また、これに興味がある可能性がありますフロッグ。
答え2
キャッシュを削除するという急いな考えについてどこかで読んだことがありますが、自分で試したことはありません。自分の責任でこれを試すことができます。
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
基本的にここで行うことは、メモリにキャッシュされたディスクの書き込みをディスクにコミットし、キャッシュされたメモリの部分を消去することです。ただし、システムが正しく構成されている場合、このコマンドが実行されると展開が開始されます。しかし、「メモリ不足」メッセージについて一時的な心の平和を得ることができます。 「&&」コマンドが示すように、ディスクコミットが失敗した場合、キャッシュ削除コマンドは機能しないため、これはかなり安全なオプションです。