Memory Leak workaround... Low Memory erkennen?

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
pimeys
Beiträge: 17
Registriert: 06.07.2013 17:22:24

Memory Leak workaround... Low Memory erkennen?

Beitrag von pimeys » 25.07.2013 19:15:31

Ich habe auf meinem Server eine Java-Applikation am Laufen, die leider irgendwo ein Memory Leak hat und alle paar Stunden OutOfMemory ist. In der Regel reicht es dann die Java-Applikation zu killen und neu zu starten um wieder ein paar Stunden Ruhe zu haben.

Klar versuche ich das MemoryLeak zu finden, das ist allerdings nicht ganz einfach, daher suche ich anch einem Workaround bis dahin. Ist es irgendwie möglich zu erkennen wenn Memory knapp wird und dann automatisch die Applikation neu zu starten?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Memory Leak workaround... Low Memory erkennen?

Beitrag von rendegast » 25.07.2013 19:29:56

Du könntest /proc/$PID/status überwachen

Code: Alles auswählen

$ cat status
....
VmPeak:    71272 kB
VmSize:    71180 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      6028 kB
VmRSS:      6028 kB
VmData:     3328 kB
VmStk:       136 kB
VmExe:       408 kB
VmLib:      5812 kB
VmPTE:       160 kB
VmSwap:        0 kB
....
Oder den Prozeß unter einem separaten Benutzer laufen lassen,
für den /etc/security/limits.d/bla.conf gesetzt wird.
(Aber ich weiß jetzt nicht,
ob bei einer Überschreitung der entsprechende Prozeß gekillt oder angehalten wird.)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Memory Leak workaround... Low Memory erkennen?

Beitrag von wanne » 25.07.2013 21:58:54

Mit java kann man eigentlich kein Memory leaken. (Nur die VM, die selbst glaube ich nicht in Java geschrieben ist kann das.)
Das einzige was man in Java machen kann ist immer noch längere Listen erstellen. Da man aber nicht vorhersehen kann ob da nochmal in Zukunft drauf zugegriffen wird ist das nicht automatisiert feststellbar. Da müsste man schon das ganze Programm verstehen.
rot: Moderator wanne spricht, default: User wanne spricht.

pimeys
Beiträge: 17
Registriert: 06.07.2013 17:22:24

Re: Memory Leak workaround... Low Memory erkennen?

Beitrag von pimeys » 26.07.2013 01:47:49

Dass man in Java kein Memory leaken kann hab ich auch mal gehört und eine Zeit dran geglaubt. Es ist vielleicht schwieriger, aber ich habe im Laufe der Jahre doch einige Wege gefunden Memory ins Leere zu schießen :D
In diesem Fall vermute ich fast sogar, dass es aus irgendeinem Grund irgendwo Thread-Leichen gibt.

Vielen Dank für den Hinweis mit /proc/PID/status, in der Datei stehen einige gute Infos drin die ich gern mal überwachen würde um vielleicht die Ursache der MemoryLeaks einzugrenzen.

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Memory Leak workaround... Low Memory erkennen?

Beitrag von catdog2 » 26.07.2013 02:09:39

Mit java kann man eigentlich kein Memory leaken.
Nicht was man im klassischen Sinn darunter versteht aber man kann natürlich wie du sagtest den GC daran hindern den Speicher frei zu geben. Das scheint auch kein sooo exotisches Problem zu sein, hört man immer wieder mal, dass sich Java Software so verhält und am Ende läufts dann aufs selbe raus.
Oder den Prozeß unter einem separaten Benutzer laufen lassen,
für den /etc/security/limits.d/bla.conf gesetzt wird.
(Aber ich weiß jetzt nicht,
ob bei einer Überschreitung der entsprechende Prozeß gekillt oder angehalten wird.)
Sollte gekillt werden. Auf ebene der aktuell laufenden shell auch mit ulimit einstellbar. Eine mächtigere Lösung wären cgroups. Der java VM kann man auch beschränkungen mitgeben.
Klar versuche ich das MemoryLeak zu finden, das ist allerdings nicht ganz einfach,
http://visualvm.java.net/ könnte eventuell Helfen.
Unix is user-friendly; it's just picky about who its friends are.

Antworten