Memória használat - bash script

Fórumok

Tisztelt Kollégák!
Nagyon hiányoltam egy olyan parancsot, amely segítségével megnézhessem, hogy a futó processzeim pontosan mennyi memóriát zabálnak. Erre írtam a következő kis scriptet, akinek tetszik, használja nyugodtan:

#!/bin/bash
verzio="0.0.1"
programname=`basename $0`
wiki="w";
opcio="k";
cim="o";
if [ $# -gt 2 ]
then
echo "Usage: $programname [-x][m|k|b][p] [v|h]";
echo " The '-x' switch shows just the biggest memory consumption.";
echo " m - Megabytes, k - Kilobytes, b - bytes";
echo " p - Show PID-s only instead of full path";
echo " v - Shows version and exits.";
echo " v - This help.";
exit 1
fi

while getopts ":mkbxpvh" kapcs
do
case $kapcs in
"m") opcio="m";;
"k") opcio="k";;
"b") opcio="b";;
"x") wiki="m"; echo "Let's see, who is eating the memory...";;
"p") cim="j"; echo "Just PID-s are listed...";;
"v") echo "Memory consumption - version $verzio - by Frantique"; exit 0;;
"h") echo "";
echo "Usage: $programname [-x][m|k|b][p] [v|h]";
echo " The '-x' switch shows just the biggest memory consumption.";
echo " m - Megabytes, k - Kilobytes, b - bytes";
echo " p - Show PID-s only instead of full path";
echo " v - Shows version and exits.";
echo " v - This help.";
echo "";
exit 0;;
"?") opcio="e"; echo "Bad argument passed... Assuming Kilobytes output.";;
esac
done;

echo "Please wait, counting...";
rm -rf /tmp/putme*
pstree -p | sed s/"[^0-9]"/"\n"/g | sort | uniq > /tmp/putmeout
i=1
touch /tmp/putmeback

for a in `cat /tmp/putmeout`
do
if [ $i -ne 1 ]
then
fnev=`pmap $a | grep ":"`
if [ $cim = "j" ]
then
fnev=`echo $fnev | cut -d " " -f 1 | sed s/":"/""/g`
fi
mennyi=`pmap $a | grep "total" | sed s/"total"/""/g | sed s/" "/""/g | sed s/"K"/""/g`
if [ $mennyi ]
then
if [ $opcio = "m" ]
then
mennyi=`expr $mennyi / 1024`;
mennyi="$mennyi Mb.";
fi
if [ $opcio = "k" -o $opcio = "e" ]
then
mennyi="$mennyi Kb.";
fi
if [ $opcio = "b" ]
then
mennyi=`expr $mennyi * 1024`; mennyi="$mennyi bytes";
fi
echo "$mennyi ---> PID $fnev" >> /tmp/putmeback;
fi
fi
i=0;
done

if [ $wiki = 'm' ]
then
echo "-------------------------------------------------------"
cat /tmp/putmeback | uniq | sort -n | tail -n 1
rm -rf /tmp/putme*
echo "-------------------------------------------------------"

exit 0
fi
cat /tmp/putmeback | uniq | sort -n
rm -rf /tmp/putme*
exit 0

Hozzászólások

gáz van gizi! valami sed-es problemo. mindjárt megnézem, mi.
--
namegvan. rosszul kopipészteltem. :]

szabad javasolni az mktemp hasznalatat atmeneti fajlok letrehozasahoz?

top szerint:
--
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4381 imp 9 0 73136 71m 22m S 0.0 28.7 3:09.72 opera

ezzel szemben ps (es a script szerint is):
--
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
imp 4381 2.1 29.0 311180 74068 tty1 S 17:18 3:11 /usr/lib/opera/9.0-20060310.5/opera -style qtcurve

Ja, amúgy meg szabadság van, lehet tovább fejleszteni. Ez csak egy kezdő ötlet volt. Beszálltok?

Én is hozzászólnék. Nekem is van egy scriptem, ami egy adott
PID memóriahasználatát adja vissza egy fájlba. Arra használom,
hogy prgogramból meghívom, majd a kimenetet visszaolvasva
megtudom, hogy az adott (futó) programmal mi a helyzet
memóriailag (periódikusan hívva: van-e memóriaszivárgás?)
Jó hosszú script (-::

Input: pid
Output: use.mem (file)

#!/bin/sh
# Memory usage for pid (as $1)

cd /meditor/HRS++/script
grep "VmData:" /proc/$1/status | awk '{print $2}' > ./use.mem

#
# end of script
#

> Sol omnibus lucet.