Obtenção de uso de memória por meio do ps não é confiável. Se você tem um kernel mais novo, ele deve suportar / proc / pid # / smaps, o que fornece algumas informações detalhadas sobre o uso de memória de cada processo. Abaixo está um script bastante sujo e rápido para percorrer cada processo que está aberto e pegue o tamanho, Rss, Pss e uso compartilhado limpo / sujo. Espero que possa ser útil de alguma forma.
#!/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