\r\n\r\n
Linuxのfreeコマンドは、コンピュータが使用しているメモリ量と、プログラムが使用できる残りのメモリ量を表示します。その出力は、素人にはわかりにくいものですが、理解する方法をご紹介します。
freeコマンドは、ターミナルウィンドウにメモリ使用量の概要を簡単に表示します。オプションやトリックはあまりなく、使い方を覚えるのに時間も手間もかかりません。しかし、その情報を適切に解釈できるようになることは、また別の問題です。自由に伝えてくれるからこそ、混乱しがちです。
これは、「free」と「available」という用語の違いと、Linuxカーネルのメモリおよびファイルシステム管理ルーチンが内部で動作する方法の違いによるものです。空きメモリがあれば、カーネルはそれを有効に活用することができ、自分の目的のためにそれを借りることになるのです。必要なときまで
また、RAM(Random Access Memory)の使用にどのような影響があるのか、そのメカニズムやデータルーチンを理解することができます。
選択の余地なく、自由に発砲させて、何が出てくるか見てみよう。
freeパソコンでは、端末のウィンドウを伸ばすと、よりきれいな表で出力されます。
total used free shared buff/cache available Mem: 2038576 670716 327956 14296 1039904 1187160 Swap: 1557568 769096 788472これらの数値はキビバイト、つまり1024バイトで表されます。Manjaroでは、freeコマンドはfree-mというエイリアスになっており、mebibytes(1048576バイト)を強制的に使用します。他のディストリビューションでは、デフォルト値はkibibytesです。
上段はシステムメモリ、下段はスワップ領域を表します。ここではこれらのコラムを紹介し、後で詳しく説明する。メモリ列のカラムは以下のとおりです。
交換列の場合、記載されています。
Buff/cacheのグラフをそれぞれの列に分けるには、-w(ワイド)オプションを使用します。
free -wこれが結果です。Buff/cacheカラムの代わりに、Buffersカラムとcacheカラムを取得します。以下は、その表から得られた数値です。
total used free shared buffers cache available Mem: 2038576 683724 265708 14660 94568 994596 1160420 Swap: 1557568 761416 796152これらの欄の数字が何を表しているのか見てみましょう。
こちらはシンプルに。これは、マザーボードに搭載されているメモリの量です。実行中のすべてのプロセスが奪い合う、貴重な資源なのです。カーネルがレフェリーじゃなくても、少なくとも戦ってるはずだ。
ちなみに、freeが情報を集めている場所は、/proc/meminfoという疑似ファイルです。このファイルは、以下のコマンドで自分で見ることができます。
less /proc/meminfo出力は、名前と値の1つのリストである。
ここからが面白いところです。
使用されている数字は、予想されるものプラスアルファを表しています。これは、プロセスに割り当てられ、ユーザープログラムによって使用され、GNOMEやKDEデスクトップ環境などで使用されるメモリです。何も不思議なことはない。しかし、バッファやキャッシュされたデータも含まれます。
何かに使われていないメモリは、無駄なメモリです。カーネルは、より効率的に動作させるために、フリーRAMをキャッシュやバッファの保持に使用します。つまり、このRAMはカーネルによって、ユーザー空間の何かによって使用されるのとは別のものに使用されているのです。
もし、入ってくるメモリ要求が、カーネルが自分自身のデバイスのために使っているRAMの一部を放棄することでしか対応できない場合、シームレスでこのようなことが起こります。このRAMを解放して他のアプリケーションに使用しても、Linuxシステムが問題なく正しく動作することに影響はありませんが、システムの性能に影響を与える可能性があります。
つまり、このコラムの本当の意味は、"たとえすぐにリサイクルできるものであっても、何かによって使用されるすべてのRAM "ということです。
この列には、どのオブジェクトによっても使用されていないRAMの量を表す数値が含まれています。Usedの欄にはバッファやキャッシュデータが含まれているため、完全に機能するLinuxシステムで「フリー」として表示されるRAMはごくわずかです。
これは必ずしも悪いことではなく、ほぼ間違いなく、RAMの使用を正しく制御するシステムが完全に機能していることを意味します。つまり、RAMはカーネルだけでなく、アプリケーションやその他のユーザー空間のプロセスによって使用され、コンピュータの性能を可能な限り向上させているのです。
Sharedの欄の数値は、tmpfsramベースのファイルシステムを保持するために使用されるメモリを示します。OSの効率的な運用のために、メモリ上に作成されるファイルシステムです。どのtmpfsファイルシステムが存在するかを確認するには、dfコマンドを使用します。
私たちが使っているオプションは
この値を見ると、まず共有欄の数値が何倍にもなっていることが分かります。ここに表示されているサイズは、これらのファイルシステムの最大サイズです。Sharedの欄の数値は、メモリ使用量としてもっともらしい数値です。
これらのファイルシステムの内容 簡単に説明すると、次のようになります。
バッファとキャッシュの列は、-w (wide) が使用されているときのみ表示されます。wオプションをつけないと、この2つの列の数値はBuff/cacheの列に統合される。
この2つのメモリ領域は相互に影響しあい、依存しあっています。キャッシュ領域は、ハードディスクから読み込んだデータを(主に)保持する。再びアクセスする必要がある場合に備えて、保持されています。ハードディスクからデータを読み出すよりも、キャッシュからデータを取り出す方がはるかに高速になります。また、キャッシュは、変更されたがまだハードディスクに書き戻されていないデータや、計算されたがまだファイルに保存されていない値を保持することができます。
様々なファイルフラグメントやデータストアを追跡するために、カーネルはバッファメモリ領域にキャッシュメモリ領域へのインデックスを構築する。バッファは、ディスクブロックやその他の情報構造を保持するメモリの部分です。キャッシュ領域に保持されているデータに関するデータが含まれている。したがって、バッファはキャッシュのメタデータである。
ファイルの読み取り要求があると、カーネルはバッファデータ構造内のデータを読み取り、要求されたファイルまたはファイルフラグメントを探します。もし見つかったら、バッファデータ構造が指すキャッシュ領域からリクエストに対応する。キャッシュになく、したがってバッファメモリ領域のメタデータにもない場合、ハードディスクからファイルを読み込む。
バッファメモリ領域内の構造体は
バッファとキャッシュに使用するメモリを1つのBuff/cacheカラムに圧縮することに意味があることがおわかりいただけたと思います。同じものの2つの部分のようなものです。キャッシュメモリ領域は、その内容をインデックス化するバッファメモリ領域がなければ意味がない。
使用可能なカラムは、空きカラムとバッファおよびキャッシュカラム(またはBuff/Cacheカラム)のうちすぐにドロップできる部分の合計である。利用可能な欄は推定値であり、正確な数値ではありません。これは賢明な推定値であり、正確なものであるが、最後の1バイトまで正確であると考えるべきではない。
グラフを自由に表示する単位を変更するには、次のいずれかのオプションを使用します。
例えば、人間が読める値を使いたい場合は、-hオプションを使用します。
free -hご覧のように、ある値はMiBで、ある値はGiBで表示されます。
totalオプションを付けると、freeはtotal行を表示し、Mem行とSwap行のtotal、Used、free列の値を合計した値を表示します。
free -h --totalc (count) オプションは、free を一定回数実行し、それぞれの間に 1 秒の休止を入れるように指示します。free を 2 回実行するには、次のコマンドを使用します。
free -h -c 2アプリケーションのメモリ使用量への影響を確認する場合は、連続的なフリーランが有効です。これにより、調査対象のアプリケーションをターミナルウィンドウで自由に起動、使用、終了することができます。
s(秒)オプションは、各フリーランの間の休止時間を決定します。連続的にフリーで動作させ、更新のたびに3秒間のポーズを入れるには、次のコマンドを使用します。
free -s 3Ctrl+Cキーで処理を停止し、コマンドプロンプトに戻ります。
各更新の間に指定された休止時間を設けて自由に実行し、一定のレポート数で停止するには、-s(秒)オプションと-c(回数)オプションを組み合わせて使用します。各更新の間に自由に5回実行し、2秒間休止するには、次のコマンドを使用します。
free -s 2 -c 55回更新が表示された後、プロセスは自ら終了し、コマンドプロンプトに戻ります。
これは現在ではほとんど役に立ちませんが、32ビットコンピュータでLinuxを実行している場合には、役に立つかもしれません。メモリ使用量を低メモリと高メモリに分離しています。
32ビットLinuxベースのOSでは、CPUは最大4GBのメモリをアドレス指定することができます。メモリはローメモリとハイメモリに分かれる。アンダーメモリは、カーネルのアドレス空間部分に直接マッピングされます。ハイメモリはカーネルに直接マッピングされません。ハイメモリは通常896MB以上です。
これは、カーネル自体(アクティブなモジュールを含む)が低メモリしか使えないことを意味します。カーネル以外のものを処理するユーザーは、ローメモリとハイメモリの両方を使用することができます。
64ビットコンピュータでは、ハイメモリの値は表示されません。
free -h -l簡単なレビューです。