Discussion:
Proportional Set Size (PSS) eines Prozeses ermitteln.
(zu alt für eine Antwort)
Celal Dikici
2021-05-03 15:54:10 UTC
Permalink
Proportional Set Size (PSS) eines Prozeses ermitteln.

Hallo Gruppe,

ich habe hier (Red Hat EL 7.9) die Aufgabe, den realen Speicherverbrauch der Prozesse zu ermitteln; sowohl den aktuellen Wert als auch den Verlauf des Verbrauches.
Hintergrund: irgendwelche -Nagios ähnliche- Überwachung meldet "Speicher voll" obwohl es noch Speicher frei ist, was Fehlalarme auslöst.

Bei meinen Recherchen habe ich gefunden, dass der normale ps Befehl den Speicherverbrauch falsch schätzt:

"Resident Set Size (RSS) : The standard measure of physical memory (it typically shared among multiple applications) usage known as resident set size (RSS) will significantly overestimate memory usage."
(https://www.2daygeek.com/smem-linux-memory-usage-statistics-reporting-tool/)

Als alternative wurde auf dieser Seite smem gepriesen. Leider ist smem in der Standard RHEL Repository nicht enthalten;
in EPEL wäre es vorhanden, aber leider ist EPEL Einsatz im Hause nicht erlaubt :(

Daher suche ich nach alternativen, wie ich PSS Wert eimes Prozesses ermitteln kan; am besten mit Shell-Mitteln oder Perl (installiert ist v5.16.3) oder python (v2.7).

==> Hat jemand eine Idee oder sogar eine Lösung, die er/sie/d mal programmiert hatte?


Nachfolgend liste ich vollständigkleitshalber die (anfäglichen) Versuche meines Vorgängers, um der Aufgabe zu genügen (hat aber nichts mit PSS zu tun), für den Fall, dass ihr dazu evtl. Kommetare / Hinweise habt (wenn nicht schonn für smem).

Vielen Dank schon mal,
Celal


memchecker.sh
#!/bin/bash

echo -e "USER Memory(%) Process TOTALUSEDMEMORY(MB) TOTALFREEMEMORY(MB) TOTALMEMORY(MB)" |sed 's/ /\| /g'
for i in {1..50};do
echo `ps aux|egrep 'app1adm|app2adm'|sort -rnk 4 |head -$i|tail -1|awk '{print $1,$4,$11}'` `free -m |grep ^M|awk '{print $3,$4,$2}'` |sed 's/ /\| /g'
done

---

memtest.sh
#!/bin/bash
function report_utilisation {
echo
echo Memory eaters :

cat /tmp/mem_usage.$$ |
awk '
{ process[$1]+=$2; }
END{
for(i in process)
{
printf("%-20s %sn",i, process[i]) ;
}

}' | sort -nrk 2 | head

rm /tmp/mem_usage.$$
exit 0
}

trap 'report_utilisation' INT

SECS=900
UNIT_TIME=10

STEPS=$(( $SECS / $UNIT_TIME ))

echo Watching Memory usage... ;

# Collect data in temp file
for((i=0;i<$STEPS;i++)); do
ps -eocomm,pmem | egrep -v '(0.0)|(%MEM)' >> /tmp/mem_usage.$$
sleep $UNIT_TIME
done

report_utilisation

----

memmap.sh
!/bin/bash

printf "%-10s%-15s%-15s%s\n" "PID" "OWNER" "MEMORY" "COMMAND"


function sys_main {
RAWIN=$(ps -o pid,user,%mem,command ax | grep -v PID |grep -v root| sort -bnr -k3 |
awk '/[0-9]*/{print $1 ":" $2 ":" $4}')

for i in $RAWIN
do
PID=$(echo $i | cut -d: -f1)
OWNER=$(echo $i | cut -d: -f2)
COMMAND=$(echo $i |cut -d: -f3)
MEMORY=$(pmap $PID |tail -n 1 |awk '/[0-9]K/{print $2}')


printf "%-10s%-15s%-15s%s\n" "$PID" "$OWNER" "$MEMORY" "$COMMAND"
done
}
sys_main | sort -bnr -k3 |head -n 50
Stefan Wiens
2021-05-07 01:25:56 UTC
Permalink
Post by Celal Dikici
Proportional Set Size (PSS) eines Prozeses ermitteln.
?
Post by Celal Dikici
ich habe hier (Red Hat EL 7.9) die Aufgabe, den realen
Speicherverbrauch der Prozesse zu ermitteln; sowohl den aktuellen Wert
als auch den Verlauf des Verbrauches. Hintergrund: irgendwelche
-Nagios ähnliche- Überwachung meldet "Speicher voll" obwohl es noch
Speicher frei ist, was Fehlalarme auslöst.
Sollte man sich da nicht zuerst die Überwachungssoftware anschauen, die
den Fehlalarm auslöst?
--
Stefan
Andreas Kohlbach
2021-05-07 02:17:29 UTC
Permalink
Post by Celal Dikici
ich habe hier (Red Hat EL 7.9) die Aufgabe, den realen Speicherverbrauch der Prozesse zu ermitteln; sowohl den aktuellen Wert als auch den Verlauf des Verbrauches.
Hintergrund: irgendwelche -Nagios ähnliche- Überwachung meldet "Speicher voll" obwohl es noch Speicher frei ist, was Fehlalarme auslöst.
Wie schon von Stefan anderem gefragt: welcher Prozess meldet das?
Post by Celal Dikici
"Resident Set Size (RSS) : The standard measure of physical memory (it typically shared among multiple applications) usage known as resident set size (RSS) will significantly overestimate memory usage."
(https://www.2daygeek.com/smem-linux-memory-usage-statistics-reporting-tool/)
Als alternative wurde auf dieser Seite smem gepriesen. Leider ist smem in der Standard RHEL Repository nicht enthalten;
in EPEL wäre es vorhanden, aber leider ist EPEL Einsatz im Hause nicht erlaubt :(
Daher suche ich nach alternativen, wie ich PSS Wert eimes Prozesses ermitteln kan; am besten mit Shell-Mitteln oder Perl (installiert ist v5.16.3) oder python (v2.7).
Vielleicht pmap? Das will als Argument die PID eines Prozesses
wissen. Kann man sicher skripten, wenn Ausgaben zu Prozessen mit
bestimmten Eigenschaften untersucht werden sollen.

[...]
--
Andreas
Lesen Sie weiter auf narkive:
Loading...