bash-Script: Speicherbedarf von Prozessen

dexter

New Member
Mich interessierte letztens die Summe des angemeldeten und residenten Speichers einer bestimmten Klasse von Prozessen. Mangels Bordmitteln habe ich mir folgendes kleines Script geschrieben, vielleicht kann's der ein oder die andere ja auch gebrauchen:

Code:
#!/bin/bash

PARAMS=$*

if test "${PARAMS}" != "" ; then
  ps aux | egrep ${PARAMS} | egrep -v "(egrep|ps aux|awk.*virtual|${0})" \
    | awk '{ vs += $5; rs += $6 }; END { print "virtual=" vs " resident=" rs }'
else
  ps aux | egrep -v "(egrep|ps aux|awk.*virtual|${0})" \
    | awk '{ vs += $5; rs += $6 }; END { print "virtual=" vs " resident=" rs }'
fi

Liegt bei mir unter "/usr/local/bin/mem".

Das Script addiert einfach die "virtual" und "resident size" der "ps"-Ausgabe, optional nach Filterung der Prozessliste per egrep, und gibt die Summen aus.

Beispiel 1: Speichersummen aller Prozesse

Code:
ns16:~ # mem
virtual=5356540 resident=1744040

Beispiel 2: Speichersummen aller java-Prozesse

Code:
ns16:~ # mem java
virtual=1365300 resident=221784

Beispiel 3: Speichersummen aller Nicht-root-Prozesse

Code:
ns16:~ # mem -v ^root
virtual=4678532 resident=1706868
 
Nettes Skript und in einigen Situationen sicherlich nützlich.

Kleiner Änderungsvorschlag:
Code:
#!/bin/sh
GREP=`which grep`
AWK=`which awk`
PS=`which ps`

if [ $# -eq 0 ]
then
  ${PS} aux | ${GREP} -v -E "(grep|ps aux|awk.*virtual|${0})" \
    | ${AWK} '{ vs += $5; rs += $6 }; END { print "VSS=" vs "k RSS=" rs "k" }'
else
  ${PS} aux | ${GREP} -E $* | ${GREP} -v -E "(grep|ps aux|awk.*virtual|${0})" \
    | ${AWK} '{ vs += $5; rs += $6 }; END { print "VSS=" vs "k RSS=" rs "k" }'
fi
 
Wofür sind die expliziten Pfadauflösungen per `which ...` gut?
Ich hatte ursprünglich noch eine Prüfung eingebaut, ob die benötigten Programme überhaupt installiert sind. Das ist z. B. bei AWK nicht unbedingt der Fall. Die Prüfung habe ich dann wieder rausgeworfen. Davon abgesehen finde ich diese Variante besser, da der Pfad zu grep so beispielsweise nur an einer einzigen Stelle geändert werden muss, falls erforderlich.
 
Back
Top