今回はLinuxメモリの確認方法について解説していきたいと思います。
みなさんメモリを気にするのはどんな時でしょうか?
どんな時にメモリを調べる?
・パソコンの動作が遅くなり、原因追及のため不要なプロセスが動いていないかメモリの使用量をチェックするとき
・ソフトウェアを使用するとき、どのくらい容量を使用しているかチェックするとき
などなどあります、普段気にすることなく、かってに使用するソフトに応じてメモリが使用されますが、悪意のあるソフト(ウイルス)などが紛れている場合もあり、メモリを大量消費することががるので、知識として持っておくと原因切り分けに便利です。
例えばゲームや動画などをするときにメモリが足りないとかくついたりすることがありますが、メモリを増やせば解消されたりなど身近に事例が多々あります。
今回はLinuxにおけるメモリの確認方法について紹介しますが、Linuxで商用を取り扱っているとメモリの使用量など記録されているため、ある日突然使用量が上がったりすると変なプロセスが動いているといったことに気づけます。
この記事でわかること?
・メモリの確認方法である各種コマンドの概要
・オプションを含む豊富な実行例
それでは解説していきます。
メモリとは
まずメモリについて紹介していきます。
プログラムやデータを一時的に保存する場所・領域です。新たに開いたファイルや動画、ブラウザの情報はメモリに一時的に保存されます。そして開いた物を消すとメモリから削除されます。
この領域が足りなければプログラムやファイルなどが実行できません。そのため実行できない場合はメモリ不足なのか・メモリを増やせば実行できるかなど原因の切り分けが必要です。
足りない時の対処法
メモリを増やす
物理メモリの総量を増やすこと。
不要なメモリの解放
ソフトやブラウザを使い終わったのに上げっぱなしにしている場合に起こります。
よくある例としてブラウザで複数のタブを開いている場合だとメモリの消費量がかなり上がります。そのため使い終わったタブは都度消していくと、メモリを節約できます。
仮想メモリを増やす
仮想メモリとは、ハードディスクやSSDの容量の一部分をメモリとして扱うことができる技術です。Linuxでは、メモリが使用できなくなると、Swap領域が使用されます。これが仮想メモリのことです。
クラウドマシンを利用
AWSやAzureのクラウドサービスを利用することです。利用したい分だけ割り振られるサービスがあるので、それを利用することによりストレスなくメモリ問題は解消できると思います。
ただ使った分だけ料金が増えるので、料金体系等サービスをを理解したうえで利用してください。
Linuxにおけるメモリ確認方法
それではコマンドとファイルについて紹介していきます。
freeコマンド
「free」は使用しているメモリの空き容量や使用量を確認するためのコマンドです。
書式
#free [オプション]
オプション
freeコマンドのオプションは多数存在します。
オプション | 説明 |
-b (--bytes) | メモリの容量をバイト単位で表示します |
-k(--kibi) | メモリの容量をキビバイト単位で表示します。デフォルトで出力される単位。 |
-m (--mebi) | メモリの容量をメビバイト単位で表示します |
-g(--gibi) | メモリの容量をギビ
バイト単位で表示します |
--tebi | メモリの容量をテビバイトで表示します |
--pebi | メモリの容量をぺビバイトで表示します |
-s(--seconds) | 指定した秒間隔で表示を続けます |
-t(--total) | 物理メモリとスワップメモリの合計も表示します |
-h(--human) | 読みやすい単位で表示する |
--kilo | メモリの容量をキロバイトで表示します
※単位を換算する際に1024ではなく1000で割って計算する
|
--mega | メモリの容量をメガバイトで表示します |
--giga | メモリの容量をギガバイトで表示します |
--tera | メモリの容量をテラバイトで表示します |
--peta | メモリの容量をペタバイトで表示します |
--si | わかりやすい単位で表示します。 |
-l --lohi | LowメモリとHighメモリの状況も表示する |
-c 回数(--count) | 回数 再出力する回数を指定する(デフォルトは1回出力して終了する) |
-t,--total | メモリの統計情報を表示します |
-V (--version) | バージョン情報を表示します |
実行例
freeの実行例を紹介していきます。
free
それぞれの項目の意味は以下の通りです。
項目 | 意味 |
total | マシンに搭載されたメモリ量 |
used | OSやアプリケーションに割り当て済みの消費量 |
buff/cache | カーネルバッファ、ページキャッシュ、スラブキャッシュの消費量 |
-buff | カーネルバッファ(メモリ上のデータをデバイスに送受信する領域) |
-cache | ページキャッシュやスラブキャッシュ(高速化のためのキャッシュ) |
free | まだ全く利用されていないメモリ量 |
shared | 共有メモリの消費量 |
available | 実質すぐに割り当てられるメモリ量(free + buff/chacheのうち解放可能な領域) |
-b (--bytes)
メモリの容量をバイト単位で表示します。
-k(--kibi)
メモリの容量をキビバイト単位で表示します。
-m (--mebi)
メモリの容量をメビバイト単位で表示します。
-g(--gibi)
メモリの容量をギビバイト単位で表示します。
-s(--seconds)
指定した秒間隔、表示を続けます。
-t(--total)
物理メモリとスワップメモリの合計も表示します。
-h(--human)
読みやすい単位で表示します。
--kilo
メモリの容量をキロバイトで表示します。
--mega
メモリの容量をメガバイトで表示します。
--giga
メモリの容量をギガバイトで表示します。
--tera
メモリの容量をテラバイトで表示します。
--peta
メモリの容量をペタバイトで表示します。
--si
わかりやすい単位(g)で表示します。
-l (--lohi)
LowメモリとHighメモリの状況を表示します。
-c 回数(--count)
再出力する回数を指定します。
-V (--version)
バージョン情報を表示します
vmstat
「vmstat」は仮想メモリやCPU、ディスクI/Oの統計情報を表示するコマンドです。
書式
$ vmstat [オプション][更新の間隔[回数]]
オプション
オプション | 説明 |
-a(--active) | アクティブ / 非アクティブの量を表示します。 |
-f(--forks) | ブート後のフォーク数(プロセスの作成回数)を表示します。 |
-m(--slabs) | スラブ情報を表示します。 |
-n(--one-header) | デフォルトでは、繰り返し表示の際に定期的にヘッダが表示されますが、このオプションを使用すると一度だけ表示されます。 |
-s(--stats) | 1項目1行でメモリの統計情報とイベントカウンタを表示します。 |
-d(--disk) | ディスクの統計情報が表示されます。 |
-D(--disk-sum) | ディスクの統計情報を1項目1行で表示します。 |
-p パーティション(--partition パーティション) | 指定したパーティションの統計情報を表示します。 |
-S (--unit) | の中から指定された単位で表示します。 |
-t(--timestamp) | タイムスタンプを表示します。 |
-w(--wide | ワイドモードで表示します。 |
実行例
それではvmstatの実行例を紹介していきます。
vmstat
仮想メモリやCPU、ディスクI/Oの統計情報をまとめて表示しております。
各項目については下記まとめましたので、ご参考いただければと思います。
項目 | 説明 |
procs(プロセスの状態) | |
r | 実行待ちプロセス数 |
b | スリープ(割り込み可能)のプロセス数 |
memory(メモリの使用状況) | |
swpd | スワップサイズ(KB) |
free | 空きメモリ(KB) |
buff | バッファメモリサイズ(KB) |
cache | キャッシュメモリサイズ(KB) |
swap(スワッピングの状況) | |
si | ディスクからスワップインされているメモリサイズ(KB/秒) |
so | ディスクへスワップアウトされているメモリサイズ(KB/秒) |
io(ブロックI/Oの状況) | |
bi | ブロックデバイスから受け取ったブロック数(ブロック/秒) |
bo | ブロックデバイスに送られたブロック数(ブロック/秒) |
system(割り込みやコンテキストスイッチの回数) | |
in | 割り込み回数/秒 |
cs | コンテキストスイッチ回数/秒 |
CPUの使用状況(ユーザモード、カーネルモード等の使用割合) | |
us | ユーザプロセスのCPU使用時間割合 |
sy | カーネルの時間割合 |
id | CPUがアイドル状態の時間割合 |
wa | CPUがI/O待ちの時間割合 |
st | ゲストOSがCPUを割り当てられなかった時間の割合 |
続いてオプションの実行例についても紹介していきます。
-a(--active)
アクティブ / 非アクティブの量を表示します。
-f(--forks)
ブート後のフォーク数(プロセスの作成回数)を表示します。
-m(--slabs)
※管理者権限で実施
スラブ情報を表示します。
-n(--one-header)
繰り返し表示の際に定期的にヘッダが表示されますが、このオプションを使用すると一度だけ表示されます。
-s(--stats)
1項目1行でメモリの統計情報とイベントカウンタを表示します。
-d(--disk)
ディスクの統計情報を表示します。
-D(--disk-sum)
ディスクの統計情報を1項目1行で表示します。
-p パーティション(--partition パーティション)
指定したパーティションの統計情報を表示します。
-S(--unit)
k(1000)、K(1024)、m(1,000,000)、M(1,048,576)の中から指定された単位で表示します。
-t(--timestamp)
タイムスタンプを表示します。
-w(--wide)
ワイドモードで表示します。
・-V(--version)
バージョンを表示します。
top
topコマンドは、稼働中のシステムをリアルタイムかつ簡潔に監視することができるコマンドです。topコマンドは、ただ単にタスクの一覧を一覧表示するだけでなく、CPU利用率やメモリ利用率、優先度、タスクの状態(実行中、停止中、ゾンビ状態など)、プロセスの実行時間なども表示されます。
top コマンドは CPUやメモリなどシステムの利用状態把握、および各プロセスごとどの程度リソースが利用されているかを確認するために利用されます。
topコマンドは非常に奥深く、
オプションやtopコマンドの表示項目については説明いたしますが、
今回はメモリ確認で利用するオプションの実行例を紹介させていただきます。
書式
$top [オプション]
オプション
項目 | 説明 |
-d | 間隔 更新する間隔を「ss.tt秒」で指定する |
-n 回数 | 表示を繰り返す回数を指定する |
-b | バッチモード。 |
-s | セキュアモード。 |
-U | 監視するユーザーを名前またはIDで指定 |
-p | プロセスID 監視するプロセスIDを指定。 |
-c | COMMAND欄(右端)を、プログラム名の表示とコマンドラインの表示のどちらにするか切り替える(起動後は「c」で切り替え) |
-i | 何も実行していないアイドルプロセスを表示するか、しないかを切り替える(起動後は「i」で切り替え) |
-S | 累積時間モード(起動後は「S」で切り替え) |
-o | 項目 出力の並べ替えに使用する項目(デフォルトはCPU使用率)を指定。指定できる項目名は「top -O」で確認 ※ |
-w桁数 | 出力の幅 |
・実行例
topコマンドのメモリに関する実行例について紹介していきます。
top
topコマンドの実行例です。各項目については下記表でまとめておりますのでご参考いただければと思います。
%MEMでCOMMANDのメモリ利用率を表しています。
各項目の意味
項目 | 説明 |
top | 時刻が表示されています。 |
up | OSが起動してからの起動時間 |
users | ログインユーザ数 |
load average | 「ディスクIO待ちののプロセス数」を示しています。
左から順に [ 1 分平均], [ 5 分平均], [ 15 分平均] の数値です。 |
Tasks | プロセス数 |
running | 実行中のプロセス |
sleeping | スリープ中のプロセス |
stopped | 実行を停止されたプロセス数 |
zombie | 正常終了されなかったプロセス |
Cpu | |
us | ユーザプロセスの使用時間の割合 |
sy | システム(カーネル)プロセスの使用時間の割合 |
ni | 実行優先度を変更したプロセス使用時間の割合 |
id | アイドル(待機)状態の使用時間の割合 |
wa | CPUがディスクI/Oの終了待ちをしていた時間の割合 |
hi | ハードウェア割り込み要求での使用時間の割合 |
si | ソフトウェア割り込み要求での使用時間の割合 |
st | OS仮想化利用時に他のCPUの計算に待たされた割合 |
Mib Mem | |
total | 物理メモリのメモリ総量 |
free | 空きメモリ |
used | 割り当て済みのメモリ量 |
buff/cache | バッファやキャッシュに割り当て中のメモリ量 |
Mib Swap | |
total | SWAP領域のメモリ総量 |
free | 空きメモリ |
used | 割り当て済み |
avail Mem | 使用可能、実質的な利用可能メモリ |
PID | プロセス名 |
USER | ユーザ |
PR | Priority値 |
NI | nice値 |
VIRT | 割り当て済みの仮想メモリ |
RES | 物理メモリのうち、実際に消費されているメモリ容量。 |
SHR | 共有メモリとして消費されているメモリ容量 |
S | S:Process State code
R 稼働中 |
%CPU | CPUで処理を行った総時間のうち、そのプロセスが処理を行った時間の割合。 |
%MEM | 物理メモリの容量に対する。 |
TIME+ | プロセス起動してから、CPUにより処理された総時間。 |
COMMAND | 実行プロセス名 |
shit + m | プロセスの一覧をメモリの使用率が高い順に並べ替えます。 |
shit + T | プロセスの一覧を稼働時間が長い順に並べ替えます。 |
shit + m
shift + e
プロセスの一覧をメモリの使用率が高い順に並べ替えます。
ps
実行中のプロセスを一覧表示するコマンドです。各プロセスでどのくらいのメモリ消費量などを調べるために利用します。
今回はメモリ箇所に関するオプションと実行例を紹介していきます。
オプション
メモリに関する確認に役立つオプションを抜粋しました。下記となります。
オプション | 説明 |
オプション f | プロセスを階層で表示します。 |
u | CPUやメモリの使用率なども表示します。 |
実行例
それでは紹介していきます。
f
プロセスを階層で表示します。後述するuオプションと併用すると見やすいです。
u
CPUやメモリの使用率なども表示します。
-fu
CPUやメモリ利用料、プロセスの階層表示してくれて、見やすくてお勧めです。
ファイルでの確認方法
ファイルでのメモリに関する情報の確認は下記ファイルでできます。
/proc/meminfo
メモリがどのように消費されているかなど詳しく記載があります。
まとめ
今回のまとめは以下となります。
“まとめ!”
・OSやプログラムを動かすには必要不可欠な存在
・原因切り分けの際に主に確認
・Linuxではコマンドとファイルなどの確認方法がある
・topコマンドが簡潔にいろんな情報がでているため便利
・必要に応じて各コマンドやファイルを閲覧する
以上となります。コマンドやオプションが多々ありますが、見やすいコマンドを使っていただければと思います。
本ブログでは他のLinuxについての情報発信もしているので興味があればご覧ください。