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?
Memory Leak workaround... Low Memory erkennen?
Re: Memory Leak workaround... Low Memory erkennen?
Du könntest /proc/$PID/status überwachen
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.)
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
....
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")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: Memory Leak workaround... Low Memory erkennen?
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.
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.
Re: Memory Leak workaround... Low Memory erkennen?
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
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.
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.
Re: Memory Leak workaround... Low Memory erkennen?
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.Mit java kann man eigentlich kein Memory leaken.
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.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.)
http://visualvm.java.net/ könnte eventuell Helfen.Klar versuche ich das MemoryLeak zu finden, das ist allerdings nicht ganz einfach,
Unix is user-friendly; it's just picky about who its friends are.