Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Proportional Set Size (PSS) eines Prozeses ermitteln.

26 views
Skip to first unread message

Celal Dikici

unread,
May 3, 2021, 11:54:11 AM5/3/21
to
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

unread,
May 6, 2021, 9:25:58 PM5/6/21
to
Celal Dikici <cdi...@gmail.com> writes:

> Proportional Set Size (PSS) eines Prozeses ermitteln.

?

> 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

unread,
May 6, 2021, 10:17:31 PM5/6/21
to
On Mon, 3 May 2021 08:54:10 -0700 (PDT), Celal Dikici wrote:
>
> 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?

> 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).

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
0 new messages