Page 1 of 1

Speicher überwachen und Programm abschiesen

Posted: 25. Jul 2001 16:08
by Leander Hanwald
Hi

Ich habe ein Problem mit einer Software das ich bisher nicht lösen konnte. Das Programm schnappt sich mehrmals täglich den gesamten Arbeitsspeicher. Es hat mehrere Child Prozesse. schiese ich einen davobn ab (mit "kill -9") werden alle Child neu gestartet und der speicher ist wieder frei. Soweit sogut, damit könnte ich leben. Leider muss ich das von Hand machen.

Kennt einer einen einfachen weg das zu Automatisieren?
Grundregel dabei: Der Speicher gilt als voll wenn er unter 10 MB geht, die Prozesse haben immer den gleichen Namen. Einen abschiesen reicht. Das ganze soll als Cron Job laufen der jede Minute den Status überprüft.

Hat einer eine Idee? Ein kleiner Script wäre Ideal, aber meine Bash und Perl kentnisse reichen dafür nicht aus :(

Re: Speicher überwachen und Programm abschiesen

Posted: 25. Jul 2001 17:26
by Rossi
wenn das ein Programm mit einem PID file ist (schau mal unter /var/run) ist, dann mach doch einfach einen cronjob, der z.B. all 3h laüft mit:

kill -HUP `cat /var/run/programm.pid`

das startet den Hauptprozess neu (und damit auch alle Kinderprozesse).

Ansonsten, wenn Du nur ein Kind töten willst, wird es schwierig - Du mußt die Ausgabe von ps filtern ... da kann ich Dir leider nicht helfen.

Re: Speicher überwachen und Programm abschiesen

Posted: 25. Jul 2001 17:26
by ronny
besser wäre es zwar das problem zu lösen, anstatt ein hässlichen workaround zu basteln...

aber sei's drum

ps h -C befehl -o %mem
gibt den speicher verbauch in % aller prozesse zu dem befehl

mit bc kannst du die liste dann irgendwie aufsummieren und mit einem maximum vergleichen

dann kannst du einen der prozesse killen
ps h -C befehl -o pid | head --lines=1 | read PID && kill -9 $PID

Re: Speicher überwachen und Programm abschiesen

Posted: 25. Jul 2001 20:05
by Leander Hanwald
Das killen ist nicht das problem, sondern eher wie ich den nun den Speicher teste und die entscheidung treffe ob ich nun abschiese oder nicht. Müsste doch mit einem Bash Script möglich sein oder? (ich nutze es zu selten ;) )

Re: Speicher überwachen und Programm abschiesen

Posted: 26. Jul 2001 12:41
by klaro
Hallo LH,
um zu ueberpruefen ob der freie Speicher kleiner 10000 KB ist, kannst du folgendes Kontrukt verwenden

code

grep MemFree: /proc/meminfo |awk '{if ($2<10000) print "OK"
else
print "Falsch"
}'

code ende

Damit ueberpruefst du die 2. Spalte ($2) der Ausgabe des grep Befehls. Das ist zwar kein Meisterwerk an Code, aber immerhin eine Loesung. Waere schoen wenn sich Jochen mal dazu aeussern koennte.

Gruß
Klaro

Re: Speicher überwachen und Programm abschiesen

Posted: 26. Jul 2001 12:41
by klaro
Hallo LH,
um zu ueberpruefen ob der freie Speicher kleiner 10000 KB ist, kannst du folgendes Kontrukt verwenden

code

grep MemFree: /proc/meminfo |awk '{if ($2<10000) print "OK"
else
print "Falsch"
}'

code ende

Damit ueberpruefst du die 2. Spalte ($2) der Ausgabe des grep Befehls. Das ist zwar kein Meisterwerk an Code, aber immerhin eine Loesung. Waere schoen wenn sich Jochen mal dazu aeussern koennte.

Gruß
Klaro

Re: Speicher überwachen und Programm abschiesen

Posted: 26. Jul 2001 14:28
by hjb
Hi,

die richtige Lösung ist ulimit.

Gruß,
hjb