タイトル通り。
「ps aux」の使用メモリ(RSS)の部分を、プロセスの「文字列単位」に合算します。
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.0 225636 9612 ? Ss 14:31 0:02 /sbin/init splash root 2 0.0 0.0 0 0 ? S 14:31 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? I< 14:31 0:00 [kworker/0:0H] root 5 0.0 0.0 0 0 ? I 14:31 0:00 [kworker/u16:0] root 6 0.0 0.0 0 0 ? I< 14:31 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 14:31 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? I 14:31 0:01 [rcu_sched] root 9 0.0 0.0 0 0 ? I 14:31 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 14:31 0:00 [migration/0] 〜省略〜
合算時には、psコマンドのヘッダー部は要らないので、「h」オプションを付けます。
$ ps auxh
合算の条件は、以下です。
- "COMMAND"の最初の文字列単位で合算する(オプションなどは無視する)
- RSSのサイズを単純に合計する
- 合算後のメモリサイズの昇順にソートする
よって、引数の差異や、プロセスを起動するコマンドが同じで、引数によって用途が大きく異なるものを別々に合算することは
できません。
まあ、簡易的なものです。
この後でコマンドが出てきますが、上記のような条件が合わなければ(PIDを見たいなど)、集計時のキーを調整すれば
ある程度集計の軸は変更できます。
コマンドの実行結果は、こんな感じ。
/lib/systemd/systemd-journald = 42972 KB /usr/lib/gnome-settings-daemon/gsd-clipboard = 48596 KB /usr/lib/gnome-settings-daemon/gsd-keyboard = 49492 KB /usr/lib/ibus/ibus-x11 = 49620 KB /usr/lib/gnome-settings-daemon/gsd-wacom = 50628 KB /usr/bin/Xwayland = 51904 KB /usr/lib/gnome-settings-daemon/gsd-xsettings = 52364 KB /usr/lib/gnome-settings-daemon/gsd-power = 52860 KB /usr/lib/gnome-settings-daemon/gsd-media-keys = 53640 KB /usr/lib/gnome-settings-daemon/gsd-color = 54092 KB /usr/lib/packagekit/packagekitd = 61324 KB /usr/bin/python = 62528 KB /usr/lib/evolution/evolution-calendar-factory-subprocess = 62828 KB /usr/bin/dockerd = 66552 KB /usr/lib/evolution/evolution-calendar-factory = 67444 KB nautilus-desktop = 69144 KB
Perl One Linerで書きます。
出力結果をKB単位にした場合。
$ ps auxh | perl -wnl -a -e 'print "$F[5] $F[10]"' | perl -wnl -a -e 'BEGIN { %sum = (); } $sum{$F[1]} += $F[0]; END { foreach my $p (keys(%sum)) { print sprintf("%s = %d KB", $p, $sum{$p}); } }' | sort -k 3 -n
MB単位にした場合。
$ ps auxh | perl -wnl -a -e 'print "$F[5] $F[10]"' | perl -wnl -a -e 'BEGIN { %sum = (); } $sum{$F[1]} += $F[0]; END { foreach my $p (keys(%sum)) { print sprintf("%s = %.2f MB", $p, $sum{$p} / 1024); } }' | sort -k 3 -n
GB単位にした場合。
$ ps auxh | perl -wnl -a -e 'print "$F[5] $F[10]"' | perl -wnl -a -e 'BEGIN { %sum = (); } $sum{$F[1]} += $F[0]; END { foreach my $p (keys(%sum)) { print sprintf("%s = %.2f GB", $p, $sum{$p} / 1024 / 1024); } }' | sort -k 3 -n
まあ、簡単に。