В Linux, как я могу отобразить использование памяти каждого процесса, если я делаю a ps -ef
? Я хотел бы видеть 'виртуальную память', 'res память', 'общая память' каждого прогресса. Я могу получить это через top
, но я хочу ту же информацию в ps -ef
так, чтобы я мог передать вывод по каналу к grep
с моим именем процесса.
Получение использования памяти через PS довольно ненадежно. Если у Вас есть более новое ядро, оно должно поддерживать/proc/pid#/smaps, который дает Вам некоторую подробную информацию о каждом использовании памяти процессов. Ниже довольно грязный и быстрый сценарий для цикличного выполнения посредством каждого процесса, который открыт, и захватите Размер, RSS, Pss и использование Shared Clean/Dirty. Надо надеяться, это может быть полезно в некотором способе.
#!/bin/bash
for pid in $(ps -ef | awk '{print $2}'); do
if [ -f /proc/$pid/smaps ]; then
echo "* Mem usage for PID $pid"
echo "-- Size:"
cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
echo "-- Rss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
echo "-- Pss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
echo "Shared Clean"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
echo "Shared Dirty"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
fi
done
ps ef -o command,vsize,rss,%mem,size
Я не мог найти опцию для общей памяти, но я действительно находил опции для % общей физической памяти и количества области подкачки, которая будет необходима для выгрузки процесса. Это и намного больше документируется в страницу справочника для PS.