CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさん、こんにちは。前回までの「きほんのトラブルシューティング」では、ネットワークとディスク容量に関してのトラブルシューティングを紹介しました。いずれも基本的なコマンドを紹介しましたが、みなさん、使う機会はありましたか?(当然、ないほうがいいですね。)
さて、今回は、メモリに関するトラブルシューティングで使うであろうコマンドを紹介しましょう。なお、今回も主にLinuxを対象とします。
とはいえ、マシンで何らかの不調が発生している場合、その原因がメモリであると、すぐに特定できることは非常に少ないでしょう。マシンの不調は、アプリケーション、ミドルウェア、OS、ハードウェアがそれぞれ複雑に関連しているからですが、動作が遅いといったような場合には、メモリ不足などの可能性もあります。以下のようなコマンドを使って、メモリ状況を把握しましょう。
マシンのメモリ状況を見ることができます。
$ 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 | 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を使用していることが分かります。
動作しているプロセスごとの状況を見ることができます。`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 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