質問: ### 前提・実現したいこと RHEL3の入ったサーバーで複数のソフトを動かそうとしています。 既に動いているソフトがあり、端末も古いためメモリに余裕がありません。 そのため空きメモリがどの程度あるのかをfreeコマンドで気にしつつ、 インストールしています。 ソフトの一つとしてjava1.6をインストールする必要があり、 oracleのサイトからjdk-6u39-linux-i586-rpm.binをダウンロードしました。 ### 発生している問題・エラーメッセージ jdkの圧縮ファイルをダウンロードする前はfreeコマンドを実行すると used→3500M free→500M でしたが、ダウンロード後は used→3600M free→400M となりました。 ダウンロードしたファイルの容量がちょうど100M程で、 ファイルの容量と同程度にメモリの空き容量が減ってしまいました。 HDDの容量が減るのは分かりますが、インストールして起動している 訳でもないのに、なぜメモリが減るのでしょうか? 一時的にデータを覚えておく。といったことがあるのでしょうか? 現在稼働中のサーバーなので再起動は任意にできません。 再起動でメモリが解放されるとか?はてなマークで一杯です。 サーバーの設定はほぼ初心者で的外れな質問でしたらすみません。 その時にはこの用語を調べたほうがいいなど教えて頂けると助かります。 ### 試したこと 試しにファイルを一度消すと、メモリが500Mに増えました。 HDDの使用量を見ましたが、数十G程空いています。 ### 補足情報(FW/ツールのバージョンなど) ls -lでjdkファイルを見るとディレクトリエントリのサイズとやらが100Mになっています。 検索するとファイルの名前や、タイムスタンプや、サイズの情報をメモリ上にキャッシング... となっていますしこちらが原因でしょうか? なぜ1ファイルでこれらの情報が100Mになっているのか分かりませんが、 他のファイルも見ていると圧縮ファイルが軒並み高いようです。 そういうものなのでしょうか?
回答: > > HDDの容量が減るのは分かりますが、インストールして起動している > > 訳でもないのに、なぜメモリが減るのでしょうか? > > > linuxではファイルなどのデバイスを読み書きする際、 空きメモリに余裕のある場合はOSが自動的にcacheを確保して、そこへ読み込みます。 これはアプリには見えないところで行われます。 そのため一時的にusedが増えますが、アプリが使えるメモリが減っているわけではありませんので、気にする必要はありません。 > > 再起動でメモリが解放されるとか? > > > cache上に読まれたデータは、それをアプリが読み込んだ時点で不要になるので いずれ再利用されたり解放されたりします。 こちらも気にする必要はありません。 > > 試しにファイルを一度消すと、メモリが500Mに増えました。 > > > これは正確に再現手順を示していただかないとよくわかりませんがおそらく この「増えた」というのをfreeコマンドの出力の1行目を見て確認されているのではないですか? freeコマンドの1行目「Mem:」に続くused,freeの値は、bufferとcacheを含めた数値に なっているので、あまり意味がありません。 2行目の「-/+ buffers/cache:」のused,freeの値が本当の使用量と空き容量だと考えてください。 詳しくは「freeコマンド 見方」などで検索してみてください。 > > ls -lでjdkファイルを見るとディレクトリエントリのサイズとやらが100Mになっています。 > > > ディレクトリ内にファイルをたくさん作ると、ディレクトリのサイズが大きくなり、 後でそのディレクトリからファイルを消してもサイズは元には戻りません。 今、ファイルが1つしかないのに100MBになっているとしたら、以前たくさんファイルがあった名残かもしれませんね。 気持ち悪ければ、新しいディレクトリを作ってそこに移動し、古いディレクトリを消して ディレクトリを前の名前にリネームすれば直ります。