RAM (Random Access Memory) は、Linux システムの重要なコンポーネントであり、注意深く監視する必要があります。
場合によっては、メモリが不足し、サーバーの応答時間が非常に遅くなったり、完全に応答しなくなったりすることがあります。
また、サーバーのパフォーマンスを向上させるために、仮想メモリとして知られるスワップメモリを増やしたいと思うかもしれません。
このチュートリアルでは、LinuxでRAMをチェックするすべての方法を紹介します。
目次
Check RAM on Linux using free
LinuxでRAMをチェックするための最も一般的なコマンドは、「free」コマンドを使用することです。
$ free total used free shared buff/cache availableMem: 4039588 3475216 137584 39596 426788 287580Swap: 0 0 0
見ての通り、出力はメモリ (実際の RAM) とスワップ (仮想メモリとも呼ばれる) の 2 つに分かれています。
free を使用すると、次のような情報が得られます:
- total : システムに現在インストールされているメモリの合計量 (単位: キロバイト)
- used : システムで現在使用されている RAM の量 (単位: キロバイト)
- free :
- free : システム上で使用可能な空きメモリの量(単位:キロバイト)
- shared : マウントされているように見えるが揮発性メモリに属する仮想ファイルシステムであるtmpfsが使用するメモリを表します。
- buffers :
- buffers : カーネルのバッファで使用されるメモリ
- cache : データがディスクに書き込まれる前に最初に保存されるページキャッシュで使用されるメモリ数
- available : システムで使用可能なメモリをキロバイト単位で表したもの
キャッシュやバッファで多くのメモリが使用されていても、システムがプロセスのためにより多くのメモリを必要とする場合、カーネルはこのスペースを解放する可能性があることに注意してください。
ディスクのチュートリアルで紹介した lsblk コマンドのように、「free」コマンドは人間に優しい形式で表示することができます。
人間に優しい形式で現在利用可能な RAM を確認するには、「free」に「-h」オプションを付けて使用します。
total used free shared buff/cache availableMem: 3.9G 3.3G 127M 38M 400M 256MSwap: 0B 0B 0B
ご覧のように、出力は読みやすくなりましたが、丸くなっています。
同様に、システムで利用可能な RAM とスワップの合計量を確認するために、free コマンドで合計の列を表示することができます。
合計の列を表示するには、「free」に「-t」オプションを付けて使用します。
$ free -t total used free shared buff/cache availableMem: 4039588 3499392 128828 39596 411368 263292Swap: 0 0 0Total: 4039588 3499392 128828
これらのコマンドを組み合わせることで、人間に優しい出力と合計欄の表示が可能になります。
出力は少し読みにくいかもしれませんが、表示される列の詳細は次のとおりです。
- r : システム上の実行可能なプロセスの数
- b : 無瞬断スリープ中のプロセスの数
- swpd : システムで現在使用されている RAM の量
- free : 使用可能なメモリ
- buff, cache :
- buff, cache : カーネル バッファおよびページ キャッシュで使用される RAM
- inactive, active : 非アクティブおよびアクティブなメモリの量
- si : ディスクから使用されるスワップ
- so : ディスクにスワップされるスワップ メモリ
その他の列はディスク I/O および CPU 使用率に関連していますが、今回のケースでは関係ないかもしれません。
$ vmstat -s 4039588 K total memory 3460532 K used memory 3398428 K active memory 198356 K inactive memory 162648 K free memory 48904 K buffer memory 367504 K swap cache 0 K total swap 0 K used swap 0 K free swap
お分かりのように、多数のライン出力が提供されていますが、私たちが達成しようとしていることに関連するものはごくわずかです。
vmstat の出力の一番上には、総メモリ、使用済みメモリ、アクティブなメモリ (使用済みメモリと同等)、非アクティブなメモリ、空きメモリが表示されます。
これらの列は、free コマンドを使用して表示される列と非常によく似ています。
また、バッファ メモリ、スワップ キャッシュ (ページ キャッシュに相当) およびスワップがある場合はその合計も表示されます。
Inspecting /proc/meminfo to check RAM
ご存知のように、カーネルはファイル システムを仮想化し、システム上のいくつかのデバイスへのエントリ ポイントを提供しています。
たとえば、/proc ディレクトリには、システム上のプロセス (すなわち、ファイル記述子) への参照が格納され、同様に、/dev には、最終的には実際のディスクを指す仮想デバイスへの参照が格納されます。
しかし、/proc ファイルの 1 つのファイルは、RAM をチェックすることに関しては、他のファイルよりも重要であるかもしれません。
これらのコマンドは実際には meminfo ファイル自体から情報を取得しているので、これは大きな驚きではありません。
/proc/meminfo ファイルを使用すると、システムのメモリの合計量、使用可能な空きメモリ、使用可能なメモリ、および使用されている可能性のあるバッファとページ キャッシュにアクセスできます。
最後に、スワップ キャッシュおよび使用されているアクティブおよび非アクティブなスワップにアクセスできます。
Listing RAM hardware using dmidecode
これまでに使用したコマンドはすべて非常に便利ですが、これらはある時点で使用されている RAM を確認するためにのみ使用できます。
場合によっては、使用している RAM ハードウェアについてもっと知りたいと思うかもしれません。
$ sudo dmidecode# dmidecode 3.1Getting SMBIOS data from sysfs.SMBIOS 2.4 present.13 structures occupying 405 bytes.Table at 0x000F10D0.Handle 0x0000, DMI type 0, 24 bytesBIOS Information Vendor: Private Version: 20171212 Release Date: 12/12/2017 Address: 0xE8000 Runtime Size: 96 kB ROM Size: 64 kB Characteristics: BIOS characteristics not supported Targeted content distribution is supported BIOS Revision: 1.0
デフォルトでは、システムで使用されているすべてのハードウェアのダンプを実行するために dmidecode が使用されます。
メモリ専用のハードウェアを取得するには、使用されているハードウェアの種類を指定する必要があります。
$ sudo dmidecode --type memory# dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 2.4 present. Handle 0x1000, DMI type 16, 15 bytes Physical Memory Array Location: Other Use: System Memory Error Correction Type: Multi-bit ECC Maximum Capacity: 4 GB Error Information Handle: Not Provided Number Of Devices: 1 Handle 0x1100, DMI type 17, 21 bytes Memory Device Array Handle: 0x1000 Error Information Handle: 0x0000 Total Width: 64 bits Data Width: 64 bits Size: 4096 MB Form Factor: DIMM Set: None Locator: DIMM 0 Bank Locator: Not Specified Type: RAM Type Detail: None
ご覧のように、dmidecode の出力は非常に便利です。これにより、システムの最大容量とその分散方法について詳しく知ることができます。
この例では、私のシステムは、DIMM 0 メモリ スペースにある 1 つの RAM によって提供される合計 4 GB のメモリを備えています。
ここで提供されている画像を使用しています。
Prometheus を使用してRAMの使用状況をチェックする
上記の方法は非常によく機能しますが、最新の監視ソリューションと比較すると、少し古い方法です。
RAM の使用状況を追跡する素晴らしい方法の 1 つは、Prometheus & Grafana のような最新の監視スタックを使用することです。
Prometheus は、ホストのメトリクス、特にメモリのメトリクスを収集するために使用できる Node Exporter を公開しています。
Node ExporterのGithubページを確認すると、/proc/meminfoファイルからメモリメトリクスを収集することに特化した「meminfo」コレクターを有効にする必要があります。
そこから、既存のダッシュボードをGrafanaに簡単にインポートして、システムに関するリアルタイムのメモリ統計を得ることができます。
前にリンクしたNode Exporterチュートリアルをチェックすると、同じ出力が得られるはずですので、ここでお好みのGrafanaダッシュボードを選択してください。
top/htopコマンドを使用したRAM使用量の追跡
最後に、メモリ使用量を追跡するために、対話型コマンドのtopとhtopを使用すると便利かもしれません。
top はシステムにネイティブにインストールされているので、「top」を実行するだけで、システムの統計情報を得ることができます。
ここで見られるように、CPU の統計情報だけでなく、システムで使用されている RAM とスワップの合計量も提供されます。
統計情報はシステム全体に対して提供されますが、インスタンス上のすべてのプロセスに対しても上から順に提供されます。
htop コマンドは、サーバー上で人間に優しいメモリ追跡を提供するために効果的に使用することができます。
htopはシステムにネイティブにインストールされていないかもしれないので、インストールする必要があるかもしれません。
$ sudo apt-get install htop$ sudo yum install htop
htopがインストールされたら、「htop」を実行することで実行を開始できます。
見てわかるように、出力はかなり似ています。
おわりに
このチュートリアルでは、コマンドラインまたはPrometheusやGrafanaのような最新の監視ソリューションを使用して、LinuxのRAMをチェックするさまざまな方法について学びました。
システムのメモリ管理を改善する必要がある場合は、システムの仮想メモリの重要性について詳しく説明しているswap関連のチュートリアルをぜひチェックしてください。
Linux のシステム管理に興味がある方は、他のチュートリアルもご覧ください。