どのプロセスが物理メモリを多く使用しているかを見つけるにはどのようにしたらよいでしょか?
OSのメモリが枯渇してきたときに、どのプロセスが原因になっているかを調べる必要があるかもしれません。ここでは、物理メモリの使用量が大きいプロセスの上位10件を見つける方法を紹介します。
※以降の実行例は、Ubuntu17.10で確認しています。
1. 実行コマンド
psコマンドのRSS(物理メモリ使用量)の値でソートして表示します。
BSDオプションを利用する場合
$ ps aux | sort -n -k 6 -r | head -n 10 #BSDオプション
スタンダードオプションを利用する場合
$ ps -eF | sort -n -k 6 -r | head -n 10 #スタンダードオプション
上記のコマンドの実行結果の6行目がRSSの値です。
RSS: resident set size, the non-swapped physical memory that a task has used (in kiloBytes).
利用したコマンド
- psコマンド: プロセスごとのメモリ使用量を求めます
- sortコマンド: 入力データの並び替えを行います
- headコマンド: 入力データの先頭部分を表示します
sortコマンドを利用しない方法
sortコマンドを使わないで、psコマンドでソートすることもできます。
$ ps aux k -rss | head -n 10
$ ps -eF --sort -rss | head -n 10
2. コマンドの実行例(1)
$ ps aux | sort -n -k 6 -r | head -n 10
root 1102 0.1 6.3 716944 63580 ? Ssl 10:36 0:01 /usr/bin/dockerd -H fd://
netdata 1004 0.4 3.8 184084 38900 ? Ssl 10:36 0:07 /usr/sbin/netdata -P /run/netdata/netdata.pid -D
root 1696 0.0 2.1 628772 22044 ? Ssl 10:36 0:01 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 1081 0.0 1.7 472112 17668 ? Ssl 10:36 0:00 /usr/lib/snapd/snapd
root 388 0.0 1.4 89844 14656 ? Ss 10:36 0:00 /lib/systemd/systemd-journald
Debian-+ 1092 0.0 1.0 61332 10640 ? Ss 10:36 0:00 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f
root 1481 0.0 0.8 25388 8440 ? S<Ls 10:36 0:00 /usr/bin/atop -a -R -w /var/log/atop/atop_20180418 600
root 1 0.0 0.8 72676 8348 ? Ss 10:36 0:01 /sbin/init
maint 1777 0.0 0.7 80108 7308 ? Ss 10:37 0:00 /lib/systemd/systemd --user
root 1718 0.0 0.7 101472 7080 ? Ss 10:36 0:00 sshd: maint [priv]
3. コマンドの実行例(2)
$ ps -eF | sort -n -k 6 -r | head -n 10
root 1102 1 0 179236 63580 0 10:36 ? 00:00:01 /usr/bin/dockerd -H fd://
netdata 1004 1 0 46021 38900 0 10:36 ? 00:00:07 /usr/sbin/netdata -P /run/netdata/netdata.pid -D
root 1696 1102 0 157193 22044 1 10:36 ? 00:00:01 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 1081 1 0 118028 17668 0 10:36 ? 00:00:00 /usr/lib/snapd/snapd
root 388 1 0 22461 14656 1 10:36 ? 00:00:00 /lib/systemd/systemd-journald
Debian-+ 1092 1 0 15333 10640 0 10:36 ? 00:00:00 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f
root 1481 1 0 6347 8440 0 10:36 ? 00:00:00 /usr/bin/atop -a -R -w /var/log/atop/atop_20180418 600
root 1 0 0 18169 8348 0 10:36 ? 00:00:01 /sbin/init
maint 1777 1 0 20027 7308 0 10:37 ? 00:00:00 /lib/systemd/systemd --user
root 1718 1486 0 25368 7080 0 10:36 ? 00:00:00 sshd: maint [priv]
4. コマンドの実行例(3)
$ ps aux k -rss | head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1102 0.1 6.3 864408 63872 ? Ssl 10:36 0:05 /usr/bin/dockerd -H fd://
netdata 1004 0.4 3.8 184444 39276 ? Ssl 10:36 0:25 /usr/sbin/netdata -P /run/netdata/netdata.pid -D
root 1696 0.0 2.1 628772 22044 ? Ssl 10:36 0:04 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 1081 0.0 1.7 472112 17564 ? Ssl 10:36 0:00 /usr/lib/snapd/snapd
root 388 0.0 1.4 89844 14716 ? Ss 10:36 0:00 /lib/systemd/systemd-journald
Debian-+ 1092 0.0 1.0 61332 10640 ? Ss 10:36 0:01 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f
root 1481 0.0 0.8 25556 8440 ? S<Ls 10:36 0:00 /usr/bin/atop -a -R -w /var/log/atop/atop_20180418 600
root 1 0.0 0.8 72676 8348 ? Ss 10:36 0:01 /sbin/init
maint 1777 0.0 0.7 80108 7308 ? Ss 10:37 0:00 /lib/systemd/systemd --user
5. コマンドの実行例(4)
$ ps -eF --sort -rss | head -n 10
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1102 1 0 216102 63872 0 10:36 ? 00:00:05 /usr/bin/dockerd -H fd://
netdata 1004 1 0 46111 39276 0 10:36 ? 00:00:24 /usr/sbin/netdata -P /run/netdata/netdata.pid -D
root 1696 1102 0 157193 22044 1 10:36 ? 00:00:04 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 1081 1 0 118028 17564 0 10:36 ? 00:00:00 /usr/lib/snapd/snapd
root 388 1 0 22461 14716 1 10:36 ? 00:00:00 /lib/systemd/systemd-journald
Debian-+ 1092 1 0 15333 10640 0 10:36 ? 00:00:01 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f
root 1481 1 0 6389 8440 0 10:36 ? 00:00:00 /usr/bin/atop -a -R -w /var/log/atop/atop_20180418 600
root 1 0 0 18169 8348 0 10:36 ? 00:00:01 /sbin/init
maint 1777 1 0 20027 7308 0 10:37 ? 00:00:00 /lib/systemd/systemd --user
以上、メモリ使用量が大きいプロセスの上位10件を見つける方法の紹介でした。