IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

きほんの トラブルシューティング

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第4回 動作が遅いときはメモリの状況を把握してみよう (小澤昌樹) 2016年10月

はじめに

みなさん、こんにちは。前回までの「きほんのトラブルシューティング」では、ネットワークとディスク容量に関してのトラブルシューティングを紹介しました。いずれも基本的なコマンドを紹介しましたが、みなさん、使う機会はありましたか?(当然、ないほうがいいですね。)

さて、今回は、メモリに関するトラブルシューティングで使うであろうコマンドを紹介しましょう。なお、今回も主にLinuxを対象とします。

メモリの状況を把握する

とはいえ、マシンで何らかの不調が発生している場合、その原因がメモリであると、すぐに特定できることは非常に少ないでしょう。マシンの不調は、アプリケーション、ミドルウェア、OS、ハードウェアがそれぞれ複雑に関連しているからですが、動作が遅いといったような場合には、メモリ不足などの可能性もあります。以下のようなコマンドを使って、メモリ状況を把握しましょう。

cat /proc/meminfo

マシンのメモリ状況を見ることができます。

$ cat /proc/meminfo
MemTotal:        3922732 kB
MemFree:          917892 kB
Buffers:         1012192 kB
Cached:           434480 kB
SwapCached:            0 kB
Active:          1221492 kB
Inactive:         332656 kB
Active(anon):     107496 kB
Inactive(anon):      560 kB
Active(file):    1113996 kB
Inactive(file):   332096 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
...

といった感じで、たくさんの情報が出てきますが、ここで見ておくのは以下の3つ。

MemTotal:        3922732 kB

搭載されている物理メモリ量です。ここでは、3.9GBが搭載されていることを示しています。

MemFree:          917892 kB

使われていないメモリ量です。917MBとなっています。

Inactive:         332656 kB

ページキャッシュや無名ページのうち、最後にアクセスされてからある程度時間が経ち、解放することができるページです。332MBとなっています。

実際に利用可能なメモリ量は、上記の `MemFree` と `Inactive` を足したものと考えればよいです。つまり、約1.2GBが使えるメモリ量ということになります。この値が一定量を下回らないようにすることが重要です。

ps aux

プロセスごとのメモリ状況を見ることができます。

$ ps aux | sort -r -k4 | head -n6
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
mysql     4013  0.0  0.9 1202480 36328 ?       Sl    2015 268:04 /usr/libexec/mysqld
apache   15865  0.0  0.3 241336 13244 ?        S    Sep25   0:00 /usr/sbin/httpd
apache   15868  0.0  0.3 241328 13156 ?        S    Sep25   0:00 /usr/sbin/httpd
apache   15861  0.0  0.3 240832 12896 ?        S    Sep25   0:00 /usr/sbin/httpd
apache   15862  0.0  0.3 240312 12680 ?        S    Sep25   0:00 /usr/sbin/httpd

上記の場合は、 `%MEM` でソートして上位5件を表示しています。

`%MEM` (4列目) がメモリの消費量(%)で、 `RSS` (6列目)が実際に使用しているメモリサイズ(kB)です。 `mysql` に36MBを使用していることが分かります。

さらに、 `apache` のみ抽出し、使用メモリ量を合計して表示するには、以下のようにします。

$ ps aux | grep apache | awk '{sum += $6}END{print sum}'
94876

94876kBを使用していることが分かります。

top

動作しているプロセスごとの状況を見ることができます。`ps` コマンドは、コマンドを実行した時点の状態を表示したのに対し、 `top` コマンドは5秒おきにプロセスの状態を更新して表示します。また、コマンド発行後に `M` (大文字)を打つと、消費メモリ順にソートできます。

$ top
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4013 mysql     20   0 1174m  35m 2836 S  0.0  0.9 268:06.01 mysqld
15865 apache    20   0  235m  12m 1276 S  0.0  0.3   0:00.29 httpd
15868 apache    20   0  235m  12m 1268 S  0.0  0.3   0:00.19 httpd
15861 apache    20   0  235m  12m 1264 S  0.0  0.3   0:00.21 httpd
15862 apache    20   0  234m  12m 1384 S  0.0  0.3   0:00.25 httpd
...

`RES` (6列目)が実際の使用メモリサイズです。 `mysql` に35MBを使用していることが分かります。`ps` コマンドの結果とあまり変わりませんね。

free -m

メモリ全体の動作状況を見ることができます。

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3830       3382        448          0        991        506
-/+ buffers/cache:       1884       1946
Swap:            0          0          0

メモリの空きは、 `-/+ buffers/cache` の `free` を見るとよいでしょう。ここでは、1946MBとなっています。また、swapを使用してないことも分かります。

まとめ

今回は、マシンの動作が遅いといった、メモリに問題がありそうな場合に使うコマンドを紹介しました。

メモリの状況を把握するには、 `free` でメモリの空き状況とswapの状態を把握、 `top` でどのプロセスがメモリを多く使っているのかを把握、といった流れで見ることがよさそうです。

また、メモリについては、日常の監視も重要です。ここで紹介したコマンドを参考に、監視もしてみましょう。

それでは、また!

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes