Linux の
free
コマンドは、コンピュータのメモリの使用量と、プログラムが使用できるメモリの量を表示します。その出力は初心者にとってはわかりにくいかもしれませんが、それを理解する方法を示します。
無料のコマンド
free
コマンドは、メモリ使用量の簡単な概要をターミナル ウィンドウに出力します。
多くのオプションや裏技はなく
、使い方を学ぶのに多くの時間や労力はかかりません。ただし、そこから提供される情報を正しく解釈する方法を学ぶのは別の話です。
free
の言っていることに混乱してしまいがちです。
これは、部分的には「無料」と「利用可能」の違いなどの用語によるものであり、部分的には Linux カーネルのメモリおよびファイル システム管理ルーチンの内部動作によるものです。カーネルが有効に活用できる空きメモリがある場合、カーネルはそれを独自の目的のために借用します。返却が必要になるまで。
内部で何が起こっているのか、そしてそのすべてが ランダム アクセス メモリ (RAM) の使用にどのような影響を与えるのかを理解できるように、基盤となるメカニズムとデータ ルーチンを詳しく見ていきます。
無料のコラム
オプションなしで
free
で起動して、何が得られるかを見てみましょう。
無料
それは醜い方法で包まれています。コンピューターでは、ターミナル ウィンドウを引き伸ばすことができます。出力をよりすっきりとした表に示します。
使用可能な無料共有バフ/キャッシュの合計
メモリ: 2038576 670716 327956 14296 1039904 1187160
スワップ: 1557568 769096 788472
数値は
kibibytes
(1024 バイト) 単位で示されます。 Manjaro では、
free
コマンドのエイリアスは
free -m
です。これにより、
メビバイト
(1,048,576 バイト) を
free
使用できるようになります。他のディストリビューションでは、デフォルトはキビバイトです。
上の行はシステム メモリを報告し、下の行はスワップ領域を報告します。ここでコラムを紹介し、すぐに詳しく見ていきます。メモリ行の列は次のとおりです。
- 合計 : コンピューターにインストールされている物理 RAM の合計量。
-
使用済み
: これは
Total-(Free+Buffers+Cache) によって計算されます。 - Free : 未使用のメモリの量。なぜ合計 = 使用済み + 無料ではないのですか?それについては後ほど説明します。
-
共有
:
tmpfsファイル システムによって使用されるメモリ。 - Buff/cache : バッファとキャッシュに使用されるメモリ。
- 利用可能 : これは、アプリケーション、コンピュータ内のその他の機能ソフトウェア (グラフィカル デスクトップ環境 や Linux コマンドなど) からのメモリ要求に対応するために利用できるメモリの推定値です。
スワップラインの列は次のとおりです。
- Total : スワップ パーティションまたはスワップ ファイルのサイズ。
- Used : 使用中のスワップ領域の量。
- Free : 残りの (未使用の) スワップ領域
ワイドディスプレイ
Buff/cache
数値を独自の列に分割するには、
-w
(ワイド) オプションを使用します。
無料 -w
これが結果です。
Buff/cache
列の代わりに、
Buffers
列と
Cache
列を取得します。表の数字は次のとおりです。
使用可能な空き共有バッファ キャッシュの合計数
メモリ: 2038576 683724 265708 14660 94568 994596 1160420
スワップ: 1557568 761416 796152
列内の数字が何を表しているかを見てみましょう。
合計列
これはシンプルなものです。マザーボードに搭載されている RAM の量です。これは、実行中のすべてのプロセスが争っている貴重なリソースです。少なくとも、カーネルが審判をしていなければ、彼らは戦っていただろう。
ちなみに、
free
情報を収集する場所は
/proc/meminfo
疑似ファイルです。次のコマンドを使用して、このファイルを自分で調べることができます。
/proc/meminfo を減らす
出力は、名前と値の単一のリストです。
使用される列
ここからが面白くなります。
Used
数字は、おそらく予想されるものに加えて、その他の多くのことを表しています。これは、プロセスに割り当てられ、ユーザー プログラムによって取得され、
GNOME
や
KDE
デスクトップ環境などによって使用されるメモリです。そこには驚きはありません。ただし、
Buffers
と
Cache
数値も含まれます。
何かに使用されていない RAM は無駄な RAM です。カーネルは予備の RAM を使用してキャッシュとバッファを保持し、より効率的に動作できるようにします。つまり、この RAM はカーネルによって何かに使用されていますが、 ユーザー空間 内の何かによっては使用されていません。
カーネルが独自のデバイスに使用している RAM の一部を解放することによってのみ対応できるメモリ要求を受信した場合、それがシームレスに行われます。この RAM を解放して他のアプリケーションに使用しても、Linux システムの正しい動作には影響しません — 何も壊れることはありません — が、システムのパフォーマンスに影響を与える可能性があります。
したがって、この列は実際には、「すぐに再利用できる場合でも、何かによって使用されているすべての RAM」を意味します。
無料コラム
この列には、何にも使用されていない RAM の量の数値が保持されます。
Used
列にはバッファーとキャッシュの数値が含まれているため、完全に機能している Linux システムに「空き」としてリストされている RAM がほとんどないことは珍しくありません。
これは必ずしも悪いことではなく、システムが完全に正常に機能し、RAM の使用を正しく制御していることをほぼ確実に意味します。つまり、RAM は、アプリケーションやその他のユーザー空間プロセス、およびコンピューターのパフォーマンスを可能な限り向上させるカーネルによって使用されます。
共有列
Shared
列の数字は、
tmpfs
RAM ベースのファイル システム
の保持に専念するメモリを表します。これらは、オペレーティング システムの効率的な機能を促進するためにメモリ内に作成されるファイル システムです。どの
tmpfs
ファイル システムが存在するかを確認するには、
df
コマンドを
使用します。
私たちが使用しているオプションは次のとおりです。
-
-h(人間): 賢明で最適な単位を使用します。 -
--total: 出力の下部に合計を含む行を表示します。 -
--type=tmpfs:tmpfsファイル システムのみをレポートします。
df -h --total --type=tmpfs
これらの値を見て最初に驚かれるのは、
Shared
列の数値よりも何倍も大きいということです。ここに示されているサイズは、これらのファイル システムの最大サイズです。実際には、それぞれが必要なだけのメモリを占有します。
Shared
列の数値は、メモリ使用量として信頼できる数値です。
これらのファイル システムには何が保持されますか?簡単な内訳は次のとおりです。
- /run : これには、 PID ファイル 、再起動後も保持する必要のない systemd ジャーナリング、 Unix ドメイン ソケット 、 FIFO 、および デーモン の管理に関連する情報など、多くの一時ファイルが保持されます。
- /dev/shm : これにより、 Debian および Debian 派生の Linux ディストリビューション上で POSIX 準拠の メモリ管理を実装できるようになります。
- /run/lock : ロック ファイルを保持します。これらは、ファイルまたは他の共有リソースが使用中であることをシステムに知らせるためのインジケーターとして使用されます。これらには、そのリソースを使用する プロセスの PID が含まれています。
- /sys/fs/cgroup : これは、 制御グループ を管理するスキームの中心的な要素です。プロセスは、使用するリソースの種類に応じて階層グループに編成されます。これにより、プロセスによるリソースの使用を監視および制限できます。
- /run/user/121 : これは、ユーザーの一時ファイルを保存するために pam_systemd によって作成されるフォルダーです。この場合、ユーザーの ID は 121 です。「ユーザー」は通常のユーザー、デーモン、またはその他のプロセスである可能性があることに注意してください。
-
/run/user/1000
: これは、ユーザー ID 1000 を持つこのユーザーの一時ファイルを保存するために
pam_systemd
によって
createdフォルダーです。これは現在のユーザー、ユーザー dave です。
バッファ列とキャッシュ列
Buffer
と
Cache
列は、
-w
(ワイド) を使用した場合にのみ表示されます。
w
オプションを指定しないと、これら 2 つの列の数値が
Buff/cache
列に結合されます。
これら 2 つのメモリ領域は相互作用し、相互に依存します。キャッシュ領域には、(主に) ハード ドライブから読み取られたデータが 保持されます。再度アクセスする必要がある場合に備えて保持されます。ハードドライブからデータを読み戻すよりも、キャッシュからデータを取得する方が高速です。キャッシュには、変更されたがまだハード ドライブに書き戻されていないデータ、または計算されたがまだファイルに保存されていない値も保持できます。
さまざまなファイルのフラグメントやデータの隠し場所を追跡するために、カーネルはバッファ メモリ領域にキャッシュ メモリ領域へのインデックスを構築します。バッファは、ディスク ブロックおよびその他の情報構造を保持するメモリの一部です。これらには、キャッシュ メモリ領域に保持されているデータに関するデータが含まれています。したがって、バッファはキャッシュのメタデータです。
ファイル読み取り要求が行われると、カーネルはバッファ データ構造内のデータを読み取り、要求されたファイルまたはファイル フラグメントを探します。見つかった場合、リクエストはバッファ データ構造が指すキャッシュ メモリ領域から処理されます。ファイルがキャッシュに存在しない場合、つまりバッファ メモリ領域のメタデータにも存在しない場合、ファイルはハード ドライブから読み取られます。
バッファメモリ領域の構造は次のとおりです。
- バッファ ヘッド : 各バッファは 、バッファ ヘッドと呼ばれるデータのブロック に記述されます。また、ブロック内のデータが変更され、関連するメモリ ページが「汚れた」場合、記述子はデータをハード ドライブに書き戻す必要性を追跡します。
- i ノード : i ノードには、ハード ドライブ (または仮想ファイル システム) 上のファイルとディレクトリの場所、ファイル サイズ、ファイルのタイムスタンプなど、 ファイルとディレクトリに関するメタデータが保持されます 。
- Dentry : dentry (ディレクトリ エントリ) は 、ディレクトリのリスト情報を保持する 構造です。これらは、ディレクトリ内のファイルおよびディレクトリの i ノードのリストと考えてください。
バッファおよびキャッシュ メモリ領域に使用されるメモリを 1 つの
Buff/cache
列に凝縮することが合理的である理由がわかります。それらは同じものの 2 つの部分のようなものです。キャッシュ メモリ領域は、その内容へのインデックスを提供するバッファ メモリ領域がなければ役に立ちません。
利用可能な列
使用可能な列は、
Free
列と、すぐに解放できる
Buffers
列と Cache 列 (または
Buff/cache
列) の部分の合計です。
Available
列は推定値であり、正確な数値ではありません。これは情報に基づいた正確な推定値ですが、最後のバイトまで正確であると考えるべきではありません。
表示単位を変更する
数値を自由に表示する単位を変更するには、次のオプションのいずれかを使用します。
- -b : 値をバイト単位で表示します。
- -k : 値をキビバイト単位で表示します (デフォルト)。
- -m : 値をミビバイト単位で表示します。
- -g : 値をギビバイト単位で表示します。
- -h : 値を最適な単位 (人間が判読できる) 単位で表示します。
たとえば、人間が判読できる値を使用するには、
-h
オプションを使用します。
無料 -h
free
、各値に最も適切な単位を使用します。ご覧のとおり、値の一部は MiB で表示され、一部は GiB で表示されます。
合計を表示する
--total
オプションを使用すると、 free に、Mem 行と
Swap
行の
Total
、
Used
、および
Free
列の値を合計する合計行が表示されます。
無料 -h --合計
カウントオプション
-c
(カウント) オプションは、各回の間に 1 秒の一時停止を挟んで、一定の回数だけ実行するよう指示
free
ます。
free
ランを 2 回実行するには、次のコマンドを使用します。
フリー -h -c 2
自由に走り続ける 継続的に
特定のアプリケーションがメモリ使用量に及ぼす影響を確認したい場合は、
free
ランニングを継続的に行うと便利です。これにより、調査しているアプリケーションを起動、使用、終了する間、ターミナル ウィンドウで
free
実行できます。
-s
(秒) オプションは、
free
の各実行間の一時停止時間を決定します。各更新の間に 3 秒の一時停止を挟んでフリーランを継続するには、次のコマンドを使用します。
無料 -s 3
Ctrl+C
を押してプロセスを停止し、コマンド プロンプトに戻ります。
[カウント] オプションと [秒] オプションの組み合わせ
各更新の間に指定された一時停止を設けて
free
ランを実行し、一定数のレポートの後に停止するには、
-s
(秒) オプションと
-c
(カウント) オプションを組み合わせます。各更新の間に 2 秒の一時停止を挟んで
free
ランを 5 回実行するには、次のコマンドを使用します。
無料 -s 2 -c 5
5 つの更新が表示されると、プロセスは自動的に終了し、コマンド プロンプトに戻ります。
低メモリと高メモリの分離
これは現在ではほとんど役に立ちませんが、32 ビット コンピューターで Linux を実行している場合には役立つかもしれません。メモリ使用量を低メモリと高メモリから分離します。
32 ビット Linux ベースのオペレーティング システムでは、CPU は最大 4GB のメモリを処理できます。メモリは低メモリと高メモリに分けられます。低メモリは、アドレス空間のカーネル部分に直接マップされます。ハイ メモリには直接のカーネル マッピングがありません。通常、高メモリとは 896 MB を超えるものです。
これは、カーネル自体 (アクティブなモジュールを含む) が使用できるメモリが少ないことを意味します。ユーザー プロセス (カーネル自体ではないもの) は、低メモリと高メモリを使用する可能性があります。
64 ビット コンピューターでは、ハイメモリの値は表示されません。
フリー -h -l
思い出はこれでできている
簡単な要約:
- 合計 : システムにインストールされている RAM の量。
-
使用済み
:
Total-(Free+Buffers+Cache) に等しい。 - Free : 何にも使用されていないメモリの量。
-
共有
:
tmpfsファイル システムによって占有されるメモリ。 -
バッファ
:
Cacheに格納されているすべてのものにインデックスを提供するために維持されるデータ構造。 - キャッシュ : ハード ドライブから読み取られたデータ、ハード ドライブへの書き戻しを待機している変更されたデータ、およびその他の計算値。
-
利用可能
: 本当に無料のもの。メモリ要求を満たすために使用できる
Free、Buffer、およびCacheのメモリの推定値。
関連: 開発者と愛好家のための最高の Linux ラップトップ





