重要なポイント
- RAM に関する情報を表示できる Linux コマンドはさまざまです。特定の用途には他のものより優れているものもあります。
- 「free」コマンドは、コマンドを実行した時点の合計、使用済み、空き、共有、バッファ/キャッシュ、および利用可能な RAM およびスワップ スペースに関する情報を提供します。
- 「top」コマンドは、Linux システム上の CPU 使用率、メモリ使用率、プロセスの詳細に関するリアルタイム情報を表示します。
Linux システム内のメモリ使用量を把握する方法はたくさんあります。このまとめでは、最も一般的に使用されるコマンドライン メソッド、
free
、
vmstat
、および
top
について説明します。
/proc/meminfo
を直接読み取る方法も見ていきます。
Linux が RAM を使用する方法
RAM は、アプリケーションやデーモンなどのすべてのプロセスが必要とする有限のリソースです。利用できるものはこれだけしかありません。カーネルはメモリの争いを判断し、不足しているすべてのプロセスに割り当てられたメモリを割り当てます。それは、幼虫よりも開いたくちばしを自分に向けている親鳥のようなものです。
未使用の RAM は無駄な RAM です。 Linux は、コンピューターを最適なパフォーマンスで実行し続けるために、 ファイル バッファー領域などに 予備の RAM を使用します。システムの RAM がプロセスの暴走やメモリ リークによって消費されているような印象を受けるのは簡単ですが、実際はそうではありません。
通常、カーネルがバックグラウンドで粘り強く仕事をしているだけです。カーネルが独自のデバイス用に確保した RAM に対する他の要求がある場合、カーネルは即座にメモリを放棄するため、害はありません。
カーネルがスワップ領域の使用を開始する方が効率的であると判断した場合、それも実行に移します。交換に関しては多くの混乱があります
Linux の値 と、カーネルが swap の使用を開始する時期 。スワップネスの値が、スワップの有効化をトリガーする RAM 使用量のしきい値を設定するというのは真実ではありません。
ここで、Linux コンピューターの RAM の使用状況を確認するためにターミナル ウィンドウで使用できるさまざまなテクニックを見てみましょう。
無料のコマンド
free コマンドを 使用すると、コンピューター上の合計、使用済み、空き、共有、バッファー/キャッシュ、および利用可能な RAM の表が表示されます。また、構成されたスワップ領域の合計量、使用量と利用可能な量も表示されます。
この例では、-m (メビバイト) オプションを使用します。ただし、-b (バイト)、-k (キビバイト)、または -g (ギビバイト) を使用することもできます。
次のコマンドを入力します。
フリー -m
得られる出力は次のとおりです。
|
合計 |
使用済み |
無料 |
共有 |
共有バフ/キャッシュ |
利用可能 |
|
|
メム |
1987年 |
927 |
80 |
79 |
980 |
811 |
|
スワップ |
1521 |
651 |
869 |
Mem
列には次の情報が含まれます。
- Total : このコンピュータ上の物理 RAM の合計量。
- Used : Free+Buffers+Cache の合計を合計金額から差し引いたもの。
- Free : 未使用のメモリの量。
-
共有
:
tmpfsファイル システムによって使用されるメモリの量。 - Buff/cache : バッファとキャッシュに使用されるメモリの量。これは、必要に応じてカーネルによってすぐに解放されます。
- 使用可能 : これは、コンピュータ上のアプリケーションやその他の操作ソフトウェアからのメモリ要求に対応するために使用できるメモリの推定値です。
Swap
列には次の情報が含まれます。
- Total : スワップ パーティションまたはファイルのサイズ。
- Used : 使用中のスワップ領域の量。
- Free : 残りの (未使用の) スワップ領域の量。
読者の 1 人から微調整した次の気の利いたトリックを使用して、使用されているスワップ領域の割合を確認することもできます。
無料 -m | grep スワップ | awk '{print ($3/$2)*100}'
vmstat コマンド
スワップ領域の状態を理解せずに、Linux ボックスで RAM がどのように使用されるかをよく理解することは不可能です。 RAM とスワップ領域は密接に連携します。
vmstat
コマンドを
使用すると、スワップ領域 (または仮想メモリ) がどのように使用されているかをさらに詳しく調べることができます。前回の再起動以降の平均値に基づいて
、スワップ関連のさまざまな統計
に関するレポートが提供されます。
次のように入力します。
vmstat
このレポートには多くのデータ ポイントがあるため、それらを細分化して説明します。
-
手順:
- r : 「実行可能な」プロセスの数。これらは実行中であるか、次のタイムスライスされた CPU サイクルのバーストを待っています。
- b : 無中断スリープ中のプロセス数。これらはスリープ状態ではなく、ブロッキング システム コールを実行しています。現在のアクションが完了するまで中断することはできません。通常、このプロセスは、リソースが解放されるのを待機するデバイス ドライバーです。そのプロセスのキューに入れられた割り込みは、プロセスが通常のアクティビティを再開したときに処理されます。
-
メモリ:
- swpd : 使用された仮想メモリの量、つまりスワップアウトされたメモリの量。
- free : アイドル (未使用) メモリの量。
- buff : バッファとして使用されるメモリの量。
- キャッシュ : キャッシュとして使用されるメモリの量。
-
スワップ:
- si : スワップ領域からスワップインされた仮想メモリの量。
- so : スワップ領域にスワップアウトされた仮想メモリの量。
-
IO:
- bi : ブロック数。仮想メモリを RAM にスワップして戻すために使用されるデータ ブロックの数。
- bo : ブロックアウトします。仮想メモリを RAM からスワップ領域にスワップするために使用されるデータ ブロックの数。
-
システム:
- in : クロックを含む、1 秒あたりの割り込み数。
- cs : 1 秒あたりのコンテキスト スイッチの数。コンテキストスイッチは、カーネルがシステム処理からユーザーモード処理に切り替わるときです。
-
CPU:
これらの値はすべて、合計 CPU 時間のパーセンテージです。
- us : ユーザー (カーネル以外) コードの実行に費やした時間。
- sy : カーネル コードの実行に費やした時間。
- id : アイドル状態で過ごした時間。
- wa : 入力または出力を待機するのに費やした時間。
- st : ハイパーバイザーが他の仮想マシンへのサービスを終了するまで、仮想マシンが戻ってこの仮想マシンの処理を行うまでに待機する必要がある時間。
現在のRAM使用量を表示するトップコマンド
top
コマンドは
、情報が満載された画面を表示します。
値は数秒ごとに更新されます。
これを使用するには、次のように入力します。
上
「e」キーが押されました。これにより、表示がメガバイト単位に変更され、バイトを表す長い文字列よりも視覚的に解析しやすくなりました。画面の上部には 5 行の情報があり、下部ペインにはデータの列があります。
各行に表示される情報は次のとおりです。
- 1 行目: 時間、コンピューターの稼働時間、ログインしている人数、および過去 1 分間、5 分間、15 分間の負荷平均はどれくらいでしたか。
- 2 行目: タスクの数とその状態: 実行中、停止中、スリープ中、またはゾンビ。
- 3 行目: CPU 情報 (以下のフィールドの内訳を参照)。
- 4 行目: 物理メモリの合計量と、空きメモリ、使用メモリ、バッファメモリ、キャッシュメモリの量。
- 5 行目: スワップ メモリの合計量と、空き容量、使用量、使用可能容量 (キャッシュから回復できると予想されるメモリを考慮)。
3 行目の CPU フィールドは次のとおりです。
- us: CPU がユーザー空間でユーザーのプロセスを実行するのに費やした時間。
- sy: CPU がシステム「カーネル空間」プロセスの実行に費やした時間。
- ni: 手動で設定された nice 値を使用して CPU がプロセスの実行に費やした時間。
- id: CPU アイドル時間。
- wa: CPU が I/O の完了を待機するのに費やした時間。
- hi: CPU がハードウェア割り込みの処理に費やした時間。
- si: CPU がソフトウェア割り込みの処理に費やした時間。
- st (スチールタイム): 仮想マシンの実行により CPU が失われた時間。
すべての列を表示するには、左または右の矢印キーを押す必要がある場合があります。各列の値については以下で説明します。
- PID: プロセス ID。
- USER: プロセスの所有者の名前。
- PR: プロセスの優先度。
- NI: プロセスの素晴らしい価値です。
- VIRT: プロセスによって使用される仮想メモリ。
- RES: プロセスによって使用される常駐メモリ。
- SHR: プロセスによって使用される共有メモリ。
- S: プロセスのステータス。 (このフィールドが取り得る値のリストは以下を参照してください)。
- %CPU: 前回の更新以降にプロセスによって使用された CPU 時間の割合。
- %MEM: 使用される物理メモリのシェア。
- TIME+: タスクによって使用された合計 CPU 時間 (100 分の 1 秒単位)。
- COMMAND: コマンド名またはコマンド行 (名前 + オプション)。 (この列は、上の画像の右側の画面外にあります。)
S
列に表示されるステータスは次のいずれかです。
- D: 中断されないスリープ。
- R: 走っています。
- S: 寝てます。
- T: トレース(停止)。
- Z: ゾンビだよ。
Q を押して
top
を終了します。
/proc/meminfo の読み取り
メモリ統計を報告する Linux のツールの多く (おそらくほとんど) は
、疑似ファイルシステム
/proc/meminfo
から情報を取得します。
cat
または
less
コマンドを使用して同じことを行うことができます。
次のように入力します。
/proc/meminfo を減らす
実行中のカーネルと CPU のアーキテクチャに応じて、異なるフィールドが表示される場合があります。仮想マシンでは次の結果が得られました。
MemTotal: 2035260 kB
MemFree: 919064 kB
MemAvailable: 1300932 kB
Buffers: 33528 kB
Cached: 457604 kB
SwapCached: 29732 kB
Active: 313360 kB
Inactive: 603276 kB
Active(anon): 74648 kB
Inactive(anon): 355004 kB
Active(file): 238712 kB
Inactive(file): 248272 kB
Unevictable: 16 kB
Mlocked: 16 kB
SwapTotal: 1557568 kB
SwapFree: 873024 kB
Dirty: 80 kB
Writeback: 0 kB
AnonPages: 414100 kB
Mapped: 97436 kB
Shmem: 4148 kB
KReclaimable: 52932 kB
Slab: 94216 kB
SReclaimable: 52932 kB
SUnreclaim: 41284 kB
KernelStack: 9280 kB
PageTables: 45264 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2575196 kB
Committed_AS: 5072192 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 35712 kB
VmallocChunk: 0 kB
Percpu: 720 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
JugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 180160 kB
DirectMap2M: 1916928 kB
特に指定のない限り、すべてのサイズは キビバイト 単位です。これらのすべての意味と、コンピューターの構成およびハードウェアに応じて表示されるその他の意味は次のとおりです。
- MemTotal: 使用可能な RAM の合計 (いくつかの予約ビットとカーネル バイナリ コードを除く)。
-
MemFree:
LowFree+HighFreeの合計。現在利用可能な RAM の量。 - MemAvailable: スワップなしで新しいアプリケーションを起動するために使用できる推定メモリ。
- バッファ: raw ディスク ブロックの一時ストレージ。これにより、ハードドライブの入力と出力が減少します。また、データはすでにメモリ内にあるため、同じデータに対する後続のリクエストへのアクセスも高速化されます。
-
Cached:
ハードドライブ上のファイルから読み取られたキャッシュされたページ (
SwapCachedは含まれません)。 - SwapCached: スワップアウトとスワップインが行われ、コピーがスワップ領域に残るメモリ。
- アクティブ: 最近使用されたメモリ。絶対に必要な場合を除き、回収されません。
- 非アクティブ: 使用されていますが、最近使用されていないメモリ。埋め立ての有力な候補地だ。
-
Active(anon):
tmpfs疑似ファイル システムで作成されたファイルに割り当てられたメモリ。匿名ファイルはハードドライブ上に存在しません。 -
Inactive(anon):
エビクション (メモリ再利用) の候補となる匿名、
tmpfs、およびshmemメモリの量。 - Active(file): 使用中のファイル キャッシュ メモリの量、または前回のメモリ再利用サイクル以降に使用されているファイル キャッシュ メモリの量。
- Inactive(file): 再利用の候補となるハード ドライブから読み取られたファイル キャッシュ メモリの量。
- Unevictable: エビクト可能である必要があるが、ユーザー空間プロセスによってメモリにロックされているため、エビクト可能ではないメモリ量。
- Mlocked: ユーザー空間プロセスによってロックされているため、削除できないメモリの合計量。
- HighTotal: ユーザー空間プログラムとページ キャッシュによって使用される HighMem の合計量。カーネルはこのメモリ ゾーンにアクセスできますが、LowMem よりもアクセスが遅くなります。
- HighFree: 空き HighMem の量。
- LowTotal: LowMem の量。HighMem と同じ用途に使用できますが、カーネルが独自の目的で使用することもできます。
- LowFree: 空き LowMem の量。
- MmapCopy: ファイル データにマップされているメモリの量。
- SwapTotal: 利用可能なスワップ領域の合計量。
- SwapFree: 現在未使用のスワップ領域の量。
- Dirty: ディスクへの書き戻しを待機しているメモリの量。
- ライトバック: メモリがディスクにアクティブに書き戻されています。
- AnonPages: ユーザー空間のページテーブルにマップされた非ファイルベースのページ。
- マップ済み: メモリにマップされたファイル (ライブラリなど)。
-
Shmem:
tmpfs疑似ファイル システムで消費されるメモリの量。 - KReclaimable: メモリ需要が十分に厳しい場合にカーネルが再利用を試みるカーネル メモリ割り当て。
- スラブ: カーネル内のデータ構造キャッシュ。
-
SReclaimable:
キャッシュなど、再利用できる
Slabメモリの量。 -
SUnreclaim:
再利用できない
Slabメモリの量。 - KernelStack: カーネル スタックに割り当てられたメモリの量。
- PageTables: 最下位レベルのページ テーブル専用のメモリ量。
- クイックリスト: ページ テーブルの割り当てと削除は非常に頻繁に行われる操作であるため、できるだけ迅速に行うことが重要です。そのため、ページ テーブルに使用されるページは、「クイックリスト」と呼ばれるさまざまなリストにキャッシュされます。
- NFS_Unstable: サーバーが受信したが、まだ不揮発性ストレージに書き込まれていない ネットワーク ファイル システム (NFS) ページ。
- バウンス: ブロック デバイスのバウンス バッファーに使用されるメモリ。バウンス バッファは、デバイスが直接アクセスできるように、メモリ内で十分低い位置に配置されます。その後、データは HighMem の目的のユーザー ページにコピーされます。
- WritebackTmp: ユーザースペースのファイルシステム (FUSE) によって一時的なライトバック バッファーに使用されるメモリ。
- CommitLimit: システム内で現在割り当て可能なメモリの総量。
- Committed_AS: 現在のすべての需要を満たすと推定されるメモリ量。プログラムが RAM を要求した場合、その要求は記録されますが、RAM はプログラムが使用を開始して初めて割り当てられます。また、プログラムが予約した最大量まで、必要に応じてのみ割り当てられます。実際に提供できるよりも多くのメモリを「割り当てる」ことができます。すべてのプログラムが一度に RAM チップを現金化しようとすると、メモリ カジノが破綻する可能性があります (そしてスワップ スペースの出資者にキャップを負わなければなりません)。
- VmallocTotal: vmalloc メモリ領域の合計サイズ。
- Vmallocused: vmalloc 領域の使用量。 Linux 4.4 以降、このフィールドは計算されなくなり、ハードコーディングされています。
- VmallocChunk: 空き vmalloc 領域の最大の連続ブロック。
- HardwareCorrupted: 物理メモリ破損の問題があるとしてタグ付けされたメモリの量。割り当てられることはありません。
-
LazyFree:
MADV_FREE状態のメモリ量。アプリケーションがページ範囲にMADV_FREEフラグを設定すると、 それらのフラグが不要になり、再利用の候補になったことを示し ます。実際の再利用は、メモリに対する十分な需要が得られるまで遅れる可能性があります。アプリケーションがページへの書き込みを開始した場合、再利用をキャンセルできます。 - AnonHugePages: ユーザー空間のページ テーブルにマップされた非ファイル バックアップの巨大ページ。ファイルでバックアップされていないページは、ハード ドライブ ファイルから取得されたものではありません。
-
ShmemHugePages:
ヒュージ ページで割り当てられた共有メモリ (
shmem) および疑似ファイル システム (tmpfs) によって使用されるメモリの量。 - ShmemPmdMapped: 巨大なページを含むユーザー空間にマップされた共有メモリの量。
- CmaTotal: CMA (連続メモリ アロケータ) ページの量。これらは、メモリの連続領域とのみ通信できるデバイスによって使用されます。
- CmaFree: 空き CMA (連続メモリ アロケータ) ページの量。
- HugePages_Total: 巨大なページ プール サイズ。
- HugePages_Free: プール内の未割り当ての巨大ページの数。
- HugePages_Rsvd: 予約された巨大ページの数。割り当てのコミットメントは行われていますが、割り当てはまだ行われていません。
- HugePages_Surp: 定義されたシステム値を超えるプール内の巨大ページの数。
- Hugepagesize: 巨大ページのサイズ。
- DirectMap4k: 4 KB ページにマップされた RAM のバイト数。
- DirectMap4M: 4 MB ページにマップされた RAM のバイト数。
- DirectMap2M: 2 MB ページにマップされた RAM のバイト数。
- DirectMap1G: 2 GB ページにマップされた RAM のバイト数。
Linux では通常のことですが、概要を簡単に把握する方法は複数あり、詳細をさらに詳しく知る方法は常に少なくとも 1 つあります。
おそらく、
free
、
top
、および
vmstate
定期的に使用し、特定の問題を詳しく調査する必要がある場合に
/proc/meminfo
予備として保管しておくことになるでしょう。





