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
Speicher überwachen und Programm abschiesen
Re: Speicher überwachen und Programm abschiesen
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.
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
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
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
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
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
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
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
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
Hi,
die richtige Lösung ist ulimit.
Gruß,
hjb
die richtige Lösung ist ulimit.
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?