インフラ

linuxメモリ高負荷時に原因調査に役立つコマンド

こんにちは、ちゃりおです。

一つのプロセスのメモリ使用率が高いことがありました。

なんとか解決できましたが、メモリ使用率を確認するコマンドを忘れていて
調べる時間がかかったので役立つコマンドを列挙しておきます。

linuxメモリ高負荷時に原因調査に役立つコマンド

centos/Amzonlinux2を使うことが多いため、docker上のcentos7で実行しました。

$ docker pull centos:centos7
$ docker run -it centos:centos7 /bin/bash

以下のコマンドが役立つと思います。それぞれ、解説していきます。

free -m
w
ps aux --sort rss
top
ls -l /proc/プロセスID/cwd

free -m

メモリとSwapの使用量を確認できます。

[root@11ea53199e83 /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7962         442        4654           0        2864        7272
Swap:          2047           0        2047

w

ログインしているユーザの一覧とIPアドレス、実行コマンドが確認できます。
不正なユーザや操作が行われていないか確認します。

[root@11ea53199e83 /]# w
 00:02:32 up 13:52,  0 users,  load average: 0.48, 0.62, 0.74
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

ps aux –sort rss

メモリ使用率でソートして、実行しているプロセスを表示します。

[root@11ea53199e83 /]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  11836  3016 pts/0    Ss   00:00   0:00 /bin/bash
root        19  0.0  0.0  51740  3452 pts/0    R+   00:03   0:00 ps aux

top

実行中のプロセスをリアルタイムで表示します。
「shift + m」でメモリ使用率順に並び替えれます。

[root@11ea53199e83 /]# top
top - 00:03:41 up 13:53,  0 users,  load average: 0.43, 0.56, 0.71
Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.5 us, 12.2 sy,  0.0 ni, 81.9 id,  0.0 wa,  0.0 hi,  0.4 si,  0.0 st
KiB Mem :  8153612 total,  4765904 free,   453712 used,  2933996 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  7447200 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   11836   3016   2616 S   0.0  0.0   0:00.08 bash
   20 root      20   0   56168   3760   3256 R   0.0  0.0   0:00.00 top

ls -l /proc/<プロセスID>/cwd

topやpsでメモリ使用率が高いプロセスを特定したら、より詳しい情報を見るために/proc/配下を確認します。
たとえば、cwdには「そのプロセスで現在動作しているディレクトリへのシンボリックリンク」が確認できます。

例えば、「sleep 60」が「PID 98」で動作していると、以下のようになります。

[root@11ea53199e83 /]# sleep 60 &
[root@11ea53199e83 /]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  11836  3036 pts/0    Ss   Dec04   0:00 /bin/bash
root        98  0.0  0.0   4372   724 pts/0    S    00:07   0:00 sleep 60
root        99  0.0  0.0  51740  3540 pts/0    R+   00:07   0:00 ps aux
[root@11ea53199e83 /]# ls -l /proc/98/cwd
lrwxrwxrwx 1 root root 0 Dec  5 00:07 /proc/98/cwd -> /

Red Hat Enterprise Linux 4: リファレンスガイド – 5.3. /proc/配下のディレクトリ

※参考ドキュメントrhel4と古いですが、一番わかりやすかったです

まとめ

メモリの使用率増加の原因調査に、役立つコマンドを挙げてみました。
他にも便利なコマンドがあると思うので、教えてもらえると嬉しいです。

インフラのテストで 使えるコマンド
インフラの結合テスト・負荷テストの時に使えるコマンド(CPU、メモリ、ディスク)サーバの結合テスト・負荷テストをたまに作ることがあります。 新人の頃は、何を作ればよいのか分からない状態でした。 最近作れるようにな...
linuxコマンド繰り返し
【Linux】コマンドを繰り返し実行する方法こんにちは、ちゃりおです。 コマンドを繰り返し実行したいことってたまにあると思います。 DNSの設定変更して、digで切り替わっている...
dokcer k8s
Docker本 最初の一冊に「【書評】Docker/Kubernetes 実践コンテナ開発入門」こんにちは、ちゃりおです。 「Docker/Kubernetes 実践コンテナ開発入門」の書評です。 以下の人におすすめです。 ...