\r\n\r\n

linuxでのfreeコマンドの使い方

linux free コマンドは、お使いのコンピュータが使用しているメモリ量と、プログラムが使用できる残りのメモリ量を表示します。その出力は、素人には分かりにくいものですが、その理解方法をご紹介します...

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です。

上段はシステムメモリ、下段はスワップ領域を表します。ここではこれらのコラムを紹介し、後で詳しく説明する。メモリ列のカラムは以下のとおりです。

  • 合計:コンピュータにインストールされている物理RAMの合計量。
  • Used:Total-(Free+Buffers+Cache)から算出されます。
  • Free:未使用メモリの量。なぜTotal=used+freeなのか、すぐに説明します。
  • 共有:tmpfsファイルシステムで使用するメモリ。
  • Buff/cache: バッファリングおよびキャッシュ用のメモリ。
  • 利用可能:アプリケーションや、グラフィカルデスクトップ環境、Linuxコマンドなど、コンピュータ内の他の機能ソフトウェアからのメモリ要求を処理するために利用できるメモリの概算値です。

交換列の場合、記載されています。

  • 合計:スワップパーティションまたはスワップファイルのサイズです。
  • Used:使用されているスワップスペースの量です。
  • フリー:残りの(未使用の)スワップ領域

大きな画面

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コマンドを使用します。

私たちが使っているオプションは

  • -h(人間):合理的で最も適切な単位を使用します。
  • --Total: 出力の下部に合計の行を表示します。
  • --type=tmpfs: tmpfsファイルシステムのみが報告されます。
df -h --total --type=tmpfs

この値を見ると、まず共有欄の数値が何倍にもなっていることが分かります。ここに表示されているサイズは、これらのファイルシステムの最大サイズです。Sharedの欄の数値は、メモリ使用量としてもっともらしい数値です。

これらのファイルシステムの内容 簡単に説明すると、次のようになります。

  • /run: PID ファイル、再起動時に保持する必要のない systemd ログ、Unix ドメインソケットに関する情報、fifo、デーモン管理など、多くの一時ファイルを保持します。
  • /dev/shm: Debian および Debian 派生 Linux ディストリビューションで POSIX 互換のメモリ管理を可能にします。
  • /run/lock:ロックファイルを保持します。ファイルやその他の共有資源が使用中であることをシステムに知らせるためのインジケーターシンボルとして使用されます。リソースを使用するプロセスのPIDが含まれる。
  • /sys/fs/cgroup:制御グループを管理する仕組みの中心的な要素です。プロセスは、使用するリソースの種類に応じて、階層的なグループに編成されます。リソースの使用を監視し、制限するプロセスを可能にします。
  • /run/user/121: pamuu systemdが作成する、ユーザーの一時ファイルを保存するためのフォルダです。この場合、ユーザーIDは121となります。 なお、「ユーザー」は通常のユーザー、デーモン、他のプロセスであっても構いません。
  • /run/user/1000: pamu systemdが作成した、ユーザーIDが1000のユーザーの一時ファイルを保存するためのフォルダ。

バッファとキャッシュカラム

バッファとキャッシュの列は、-w (wide) が使用されているときのみ表示されます。wオプションをつけないと、この2つの列の数値はBuff/cacheの列に統合される。

この2つのメモリ領域は相互に影響しあい、依存しあっています。キャッシュ領域は、ハードディスクから読み込んだデータを(主に)保持する。再びアクセスする必要がある場合に備えて、保持されています。ハードディスクからデータを読み出すよりも、キャッシュからデータを取り出す方がはるかに高速になります。また、キャッシュは、変更されたがまだハードディスクに書き戻されていないデータや、計算されたがまだファイルに保存されていない値を保持することができます。

様々なファイルフラグメントやデータストアを追跡するために、カーネルはバッファメモリ領域にキャッシュメモリ領域へのインデックスを構築する。バッファは、ディスクブロックやその他の情報構造を保持するメモリの部分です。キャッシュ領域に保持されているデータに関するデータが含まれている。したがって、バッファはキャッシュのメタデータである。

ファイルの読み取り要求があると、カーネルはバッファデータ構造内のデータを読み取り、要求されたファイルまたはファイルフラグメントを探します。もし見つかったら、バッファデータ構造が指すキャッシュ領域からリクエストに対応する。キャッシュになく、したがってバッファメモリ領域のメタデータにもない場合、ハードディスクからファイルを読み込む。

バッファメモリ領域内の構造体は

  • バッファヘッダ:各バッファは、バッファヘッダと呼ばれるデータブロックで記述されます。さらに、ブロック内のデータが変更され、関連するメモリページが「ダーティ」になった場合、ディスクリプタはデータをハードディスクに書き戻す必要性を把握する。
  • inode:inodeは、ハードディスク(または仮想ファイルシステム)上の位置、ファイルサイズ、ファイルのタイムスタンプなど、ファイルやディレクトリのメタデータを保持します。
  • デントリ:デントリ(ディレクトリエントリ)は、ディレクトリリストに関する情報を保持する構造体である。ディレクトリ内のファイルやディレクトリのinodeのリストと考えることができる。

バッファとキャッシュに使用するメモリを1つのBuff/cacheカラムに圧縮することに意味があることがおわかりいただけたと思います。同じものの2つの部分のようなものです。キャッシュメモリ領域は、その内容をインデックス化するバッファメモリ領域がなければ意味がない。

使用可能なカラム

使用可能なカラムは、空きカラムとバッファおよびキャッシュカラム(またはBuff/Cacheカラム)のうちすぐにドロップできる部分の合計である。利用可能な欄は推定値であり、正確な数値ではありません。これは賢明な推定値であり、正確なものであるが、最後の1バイトまで正確であると考えるべきではない。

表示単位を変更する

グラフを自由に表示する単位を変更するには、次のいずれかのオプションを使用します。

  • -b:表示値をバイト数で表示します。
  • -k:値をキビバイト単位で表示する(これはデフォルト値である)。
  • -m:表示値をメガバイト単位で表示します。
  • -g:表示値をGiBで表示します。
  • -h: 値を合理的なベストフィット単位で表示します(人間が読めるように)。

例えば、人間が読める値を使いたい場合は、-hオプションを使用します。

free -h

ご覧のように、ある値はMiBで、ある値はGiBで表示されます。

合計を表示

totalオプションを付けると、freeはtotal行を表示し、Mem行とSwap行のtotal、Used、free列の値を合計した値を表示します。

free -h --total

カウントオプション

c (count) オプションは、free を一定回数実行し、それぞれの間に 1 秒の休止を入れるように指示します。free を 2 回実行するには、次のコマンドを使用します。

free -h -c 2

連続フリーラン

アプリケーションのメモリ使用量への影響を確認する場合は、連続的なフリーランが有効です。これにより、調査対象のアプリケーションをターミナルウィンドウで自由に起動、使用、終了することができます。

s(秒)オプションは、各フリーランの間の休止時間を決定します。連続的にフリーで動作させ、更新のたびに3秒間のポーズを入れるには、次のコマンドを使用します。

free -s 3

Ctrl+Cキーで処理を停止し、コマンドプロンプトに戻ります。

カウントとセカンドオプションの組み合わせ

各更新の間に指定された休止時間を設けて自由に実行し、一定のレポート数で停止するには、-s(秒)オプションと-c(回数)オプションを組み合わせて使用します。各更新の間に自由に5回実行し、2秒間休止するには、次のコマンドを使用します。

free -s 2 -c 5

5回更新が表示された後、プロセスは自ら終了し、コマンドプロンプトに戻ります。

ローメモリとハイメモリの切り分け

これは現在ではほとんど役に立ちませんが、32ビットコンピュータでLinuxを実行している場合には、役に立つかもしれません。メモリ使用量を低メモリと高メモリに分離しています。

32ビットLinuxベースのOSでは、CPUは最大4GBのメモリをアドレス指定することができます。メモリはローメモリとハイメモリに分かれる。アンダーメモリは、カーネルのアドレス空間部分に直接マッピングされます。ハイメモリはカーネルに直接マッピングされません。ハイメモリは通常896MB以上です。

これは、カーネル自体(アクティブなモジュールを含む)が低メモリしか使えないことを意味します。カーネル以外のものを処理するユーザーは、ローメモリとハイメモリの両方を使用することができます。

64ビットコンピュータでは、ハイメモリの値は表示されません。

free -h -l

記憶はこうして形成される

簡単なレビューです。

  • 合計:システムに搭載されているRAMの量。
  • 使用量:合計-(フリー+バッファ+キャッシュ)に等しい。
  • フリー:何もかもが全く使用されていないメモリ量。
  • 共有:tmpfsファイルシステムが占有するメモリ。
  • バッファ:キャッシュに格納されたすべてのコンテンツのインデックスを提供するために維持されるデータ構造。
  • キャッシュ:ハードディスクから読み込んだデータ、ハードディスクへの書き戻し待ちの修正データ、その他計算値。
  • 空きメモリ、キャッシュ、キャッシュのうち、メモリ要求を満たすために利用可能なメモリの推定値です。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ