Можно ли форматировать вывод ps RSS (память), чтобы сделать его более удобным для человека?
Проведение ps ux
возвращает хороший список информации о процессе, легко grep
через или watch
, Тем не менее, кажется, что нет большой гибкости в выводе использования памяти; RSS
(размер резидентного набора) печатается в килобайтах, что для больших процессов трудно читать (особенно с первого взгляда), и %MEM
дает 100
× RSS
/ system_memory
,
du
Утилита имеет прекрасный -h
флаг, который печатает пространство более удобным для пользователя способом. Я не смог найти ничего эквивалентного для ps
, Есть ли специальный трюк форматирования, который может сделать это?
4 ответа
ps ux | numfmt --header --to=iec --field 5,6 --padding 6
Вам нужен coreutils >= 8.25
Я лично предпочитаю это:
ps -eo pmem,comm,pid,maj_flt,min_flt,rss,vsz --sort -rss | numfmt --header --to=iec --field 4-5 | numfmt --header --from-unit=1024 --to=iec --field 6-7 | column -t | head
Кажется, что нет соответствующего флага в ps
так что нужно либо использовать другой инструмент (лично я предпочитаю htop
) или возиться с ps
выход немного. Я думаю, вы хотите придерживаться ps
, Вот маленький грязный скрипт, который я сделал в качестве примера:
# get terminal width
WIDTH=`tput cols`
# pipe stdin to awk
cat | \
awk '\
BEGIN {
# set output format
CONVFMT="%.2f"
}
NR==1 {
# search first line for columns that need to be converted from K to M
for (i=1;i<=NF;i++)
# add condition for new columns if you want
if ($i=="VSZ" || $i=="RSS") {
# column numbers are stored in an array
arr[i]=i;
$i = $i "(MB)"
}
}
NR > 1 {
# edit appropriate columns
for (i in arr)
$i=$i/1024;
}
{
# print every line
print $0
}' | \
# format the output into columns and trim it to terminal width
column -t | cut -c 1-$WIDTH
Сохраните это в файл, скажем prettyps.sh
, сделайте его исполняемым:
chmod + x prettyps.sh
и использовать следующим образом:
PS UX | /path/to/prettyps.sh
Использование этого сценария имеет недостаток добавления дополнительных процессов в вывод ps, но, тем не менее, он работает:
$ ps ux |./prettyps.sh USER PID% CPU% MEM VSZ (МБ) RSS(МБ) КОМАНДА ВРЕМЕНИ ЗАПУСКА СТАТИСТИКИ Поно 2658 0,0 0,0 358,88 4,29? Sl 02:33 0:00 /usr/bin/gnome-keyring ... вывод усечен... поно 4507 0,0 0,0 19,14 1,81 балла / 1 с + 03:29 0:00 человек Поно 4518 0,0 0,0 10,55 0,96 баллов /1 S+ 03:29 0:00 пейджер Поно 4727 0,7 0,9 1143,59 53,08? Ssl 04:10 0:24 /opt/sublime_text/subl Поно 4742 0,1 0,4 339,05 25,80? Sl 04:10 0:03 /opt/sublime_text/plug Поно 5177 0,0 0,0 19,23 1,32 балла /0 R+ 05:05 0:00 пс pono 5178 0,0 0,0 4,34 0,61 балла /0 S+ 05:05 0:00 /bin/sh
Надеюсь, это поможет найти способ, который подходит вам.
Реквизит @adrianlxt! Это мой новый псевдоним "pss":
ps -eo pid,pmem,rss,vsz,comm,command --sort -rss | numfmt --header --from-unit=1024 --to=iec --field 3-4 | awk '$3 != 0'
Еще одно решение — использоватьAWK
. Например,
ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}'