Autor Thema: JVMDUMP006I Speicherauszugsereignis "systhrow" wird verarbeitet; Detail "java/la  (Gelesen 22903 mal)

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Hi Leute,
ich habe gerade einen Java Agenten zu fassen, einige Berechnungen anstellen soll.

Aus Notes hole ich mir ein Dokument, Session, Agent, DB
Diese recycle ich später, sezte diese dann auf NULL

Nachdem ich den Agenten aber mehrmals laufen gelassen habe, kommt diese Fehlermeldung.

Nach ein wenig Suchen habe ich etwas gefunden, ich sollte die MaxHeapSize erhöhren. Habe ich gemacht und ist nun doppelt so groß.
Nun kommt der Fehler schon nach 2 mal laufen lassen. Und dazu noch  einer, der jede Minute geschrieben wird.
Ein Neustart hilft nur bei dem OutOfMemory bis der Agent wieder läuft.

"02.03.2012 15:23:31   Process C:\Program Files\IBM\Lotus\Domino\nserver.exe (2484/0x9B4) has terminated abnormally
02.03.2012 15:24:31   Process C:\Program Files\IBM\Lotus\Domino\nserver.exe (2484/0x9B4) has terminated abnormally
02.03.2012 15:25:31   Process C:\Program Files\IBM\Lotus\Domino\nserver.exe (2484/0x9B4) has terminated abnormally
02.03.2012 15:26:31   Process C:\Program Files\IBM\Lotus\Domino\nserver.exe (2484/0x9B4) has terminated abnormally"

Hat einer eine Ahnung und kann mir helfen?

02.03.2012 15:23:33   Agent  error: JVMDUMP006I Speicherauszugsereignis "systhrow" wird verarbeitet; Detail "java/lang/OutOfMemoryError" - Bitte warten.
02.03.2012 15:23:33   Agent  error: JVMDUMP032I  
02.03.2012 15:23:33   Agent  error: JVMDUMP010I Snap-Speicherauszug geschrieben auf C:\Program Files\IBM\Lotus\Domino\data\Snap.20120302.152333.2364.0001.trc
02.03.2012 15:23:33   Agent  error: JVMDUMP032I  
02.03.2012 15:23:33   Agent  error: JVMDUMP010I Heap-Speicherauszug geschrieben auf C:\Program Files\IBM\Lotus\Domino\data\heapdump.20120302.152333.2364.0002.phd
02.03.2012 15:23:33   Agent  error: JVMDUMP013I Speicherauszugsereignis "systhrow" verarbeitet, Detail "java/lang/OutOfMemoryError".
02.03.2012 15:23:33   Agent  error: Ausnahmebedingung in Thread "main"
02.03.2012 15:23:33   Agent  error: java.lang.OutOfMemoryError
02.03.2012 15:23:33   JVM: Creation of the byte [] object failed.
« Letzte Änderung: 02.03.12 - 15:55:29 von Fragensteller »

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Ohne Code nicht.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
ok, ich teste mal kurz weiter.

Ich hatte einen FileInputstream erstellt
FileInputStream fileInputStream = new FileInputStream(tempFile);

aber nicht wieder geschlossen.

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
um die erzeugten DMP files zu analysieren, kannst du Eclipse Memory Analyser ( mat ) too lverwenden.
(http://www.eclipse.org/mat)
Zusätzlich musst du noch ein plugin installieren ( http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html )
Damit lassen sich dann MemoryLeaks recht "einfach" aufspüren.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Danke,

ich versuche es mal.
Das Schliessen des Streams hat nichts gebracht.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Sind in dem Agenten irgendwelche 3rd Party Libs eingebunden?
Notes/Domino haben da seit 12 Jahren ein Problem mit dem Classloader, der zu einem Memory-Leak führt.
Die andere Möglichkeit ist, dass Du in einer Schleife sehr viele Notes-Objekte erzeugst und sie nicht richtig recyclest.

Ich würde mich über ein Tutorial von eknori zum Thema "Memory Leaks aufspüren mit diesem Tool" freuen. Nix für ungut. Schwarzer Humor.   

saludos solidarios

Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
hi, ja das Tool hat geholfen.

The classloader/component "lotus.domino.AgentLoader @ 0x7fff6ecd840" occupies 58.543.768 (46,52%) bytes. The memory is accumulated in one instance of "java.util.Hashtable$Entry[]" loaded by "<system class loader>".

Keywords
lotus.domino.AgentLoader @ 0x7fff6ecd840
java.util.Hashtable$Entry[]


Label                                            Number of Objects                         Used Heap                       Size Retained Heap Size
java.util.Hashtable$Entry
First 10 of 5.877 objects              5.877                                              329.112                           58.406.120


Es wurde viel mit Hashmaps und TreeMaps gearbeitet.
Werde also mal versuchen die 3rd Party Libs rauszunehmen und das ganze auf linkedlists umzustellen.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
hä???
« Antwort #7 am: 05.03.12 - 22:26:00 »
Also das Tool hat ganz viele Hashtable Einträge gefunden. Ich würde daraus schliessen, dass das Ding nix taugt, weil das kann alles mögliche heißen. Verdächtig ist, dass der AgentLoader die Hashtables hält. Hmm. Das ist nun wieder interessant. Vielleicht taugt das Ding doch was. Wie gesagt Third Party Libs.
Und was ist das Problem mit den HashMap und TreeMap? Die sind im Paket java.util vom JDK und sind nicht böse.

WICHTIG UND VERMUTLICH DES PUDELS KERN: Mit Third Party Libs meine ich .jar Dateien, die im Agenten eingehängt sind. Schau da mal nach.
Poste mal die import statements oben im Agenten.

Domino Server und Notes Client haben ein lib/ext Verzeichnis (Such nach ext als Ordner auf der Maschine, auf dem der Agent läuft). Häng die jars aus dem Agenten raus und pack die ins lib/ext. 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Das Umstellen auf LinkedLists hat es nicht gebracht. Also wieder HashMaps.
Hatte nur gelesen das hashMaps und TreeMaps SpeicherLeaks verursachen können.

Eingebunden hatte ich die AdWords-Google-API.
Habe die nun ausgehängt und ins lib/ext Verzeichnis gepackt. WOW...
Bisher hatte ich wenn ich gestartet hatte mit runtime.freeMemory() beim ersten start 17 MB undbeim zweiten 3 MB.
Beim dritten Start kamm dann outofmemory.

Jetzt habe ich konztant 55,7 MB.

Leider bekomme ich jetzt noch einen Fehler.
Wenn ich das richtig verstehe, dann findet er die ausgehängte und ins ext kopierte Jar Datei nicht.

Muß ich hier noch etwas beachten?

Exception in thread "AgentThread: xx.xxxx.adwords.Run"
06.03.2012 10:01:44   Agent  error: java.lang.NoClassDefFoundError: com.google.api.adwords.v201109.cm.ReportDefinitionReportType
06.03.2012 10:01:44   Agent  error:  at xx.xxxx.adwords.Run.NotesMain(Run.java:120)
06.03.2012 10:01:44   Agent  error:  at lotus.domino.AgentBase.runNotes(Unknown Source)
06.03.2012 10:01:44   Agent  error:  at lotus.domino.NotesThread.run(Unknown Source)
06.03.2012 10:01:44   Agent  error: Caused by:
06.03.2012 10:01:44   Agent  error: java.lang.ClassNotFoundException: com.google.api.adwords.v201109.cm.ReportDefinitionReportType
06.03.2012 10:01:44   Agent  error:  at lotus.domino.AgentLoader.loadClass(Unknown Source)
06.03.2012 10:01:44   Agent  error:  at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
« Letzte Änderung: 06.03.12 - 10:55:32 von Fragensteller »

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
So hat geklappt. Ich musste den Server neu starten.
Bau das ding nun mal zuende und gebe Rückmeldung wegen dem Leak.

Danke nochmals

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hallo Fragensteller,

wie lautet die Rückmeldung?
Eins hab ich hier jedenfalls gelernt.

Erscheint dieses Muster
Zitat
lotus.domino.AgentLoader @ 0x7fff6ecd840
java.util.Hashtable$Entry[]
von dem Tool, gibt es ein Problem mit dem ClassLoader, der völlig in Verantwortung von IBM liegt.
Classloader speichern die Klassen in Hashtables. Vermutlich funktioniert der check nicht, dass eine Klasse bereits geladen ist. Die Hashtable wird immer größer und füllt irgendwann den gesamten für die VM vorgesehenen Speicherraum aus.

Ein Programmierer von Business Logik sollte sich mit diesem Thema überhaupt nicht auseinanderzusetzen. Mir ist auch keine andere Java-basierte Plattform bekannt, in der ein nicht funktionierender Class Loader zu ähnlichen Problemen führt.

Gruß Axel    
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Fragensteller

  • Junior Mitglied
  • **
  • Beiträge: 72
Hallo

ja seit ich die Klasse bzw Bibliothek ausgelagert habe ist alles stabil.
« Letzte Änderung: 07.03.12 - 17:51:18 von Fragensteller »

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Das erschreckende ist, dass dieser Fehler schon seit Urzeiten bekannt ist, aber nie behoben wird. Wahrscheinlich auch deshalb weil niemand einen PMR zu diesem Problem aufmacht.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Tja Ralf, und die Überzeugung, dass sich PMRs ausgehen, scheint positiv mit einer hohen Anzahl von Vorfahren in der K.u.K Monarchie korreliert zu sein. In mir ranzt innerlich etwas los, wenn ich das Wort höre.  ;D
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Dann ohne "PMR" formuliert: Wie soll IBM das Problem fixen, wenn niemand einen Bugreport erstellt?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Dann ohne "PMR" formuliert: Wie soll IBM das Problem fixen, wenn niemand einen Bugreport erstellt?

Guten Morgen,
die hier angesprochenen Probleme kommen mir doch recht bekannt vor und während ich meist stummer Mitleser bin und mich über die vielen Anregungen hier im Forum freue, möchte ich doch kurz auf Deine obige Antwort eingehen.

Eine kleine Geschichte:
Es war einmal ein Domino Cluster R7.03, auf dem ein Java Agent in mehreren unterschiedlichen DB's jahrelang seinen Dienst tat. Völlig unauffällig, stabil und betreuungsfreundlich.
Dann kam das Serverupdate (852FP1) und die JVM Dumps. Nach etwas selber Rumprobieren dann der erste PMR (40456), der nach längerem Hin- und her zu SPR # MCOA8C7CNX führte und uns einen Hotfix brachte, der das Problem (scheinbar) löste. Mit R853 sei das Problem dann sowieso endgültig aus der Welt... so ging die Mär.
R852FP3 kam und die JVM Dumps kehrten wieder. Der nächste PMR (40822) brachte keine Hotfixes, sondern ein Vertrösten auf R853. Dort sei alles gut... wirklich.
R853 kam und die JVM Dumps waren schlimmer denn je. Der aktuelle PMR (41089) ist seit 222 Tagen offen und ungelöst.

Im Verlaufe der Konversation mit BigBlue hat man uns auch geraten, die im Projekt enthaltenen JAR's extern abzulegen im /jvm/lib/ext Verzeichnis und ja... das brachte was. Aber: wir wollen das nicht. Das Einbetten von JAR's in eine NotesDB ist eine von IBM angebotene Funktion und die soll bitteschönn auch richtig funktionieren. Hat ja auch alles prima geklappt in R7, warum nicht in R85?

/OT Ja, ich bin ein bischen stur.  ::) /OT

Soooo.... jetzt noch ein paar Ergänzungen zum Thread selbst.
- Neben den LND (Lotus Notes Diagnostic Tools) zur Analyse von NSD Files gibts auch noch ISA (IBM Support Assistant), eine Art Framework zur Fehleranalyse von IBM Produkten. Im ISA kann man ein paar nette Analyse-Module zum Thema Java Dump Analyse runterladen und nutzen.
- Bei uns war es so, daß neben java/lang/ClassLoader auch noch java/security/Policy Unmengen java/util/Hashtable$Entry, byte[] und ein paar java/util/HashMap$Entry gefressen haben
- was passiert, wenn man JAR's in's /jvm/lib/ext legt? Üblicherweise steht im \jvm\lib\security\java.policy File folgendes:

Code
// Standard extensions get all permissions by default

grant codeBase "file:${java.home}/lib/ext/*" {
	permission java.security.AllPermission;
};

--> Jetzt noch 1 und 1 zusammenzählen: soso... wenn ich die JAR's also raus aus der NSF nehme und die Security abschalte, dann läuft plötzlich alles, ja? Das Thema habe ich beim freundlichen Herrn aus Irland auch mal angesprochen, Ergebnis: ich war wieder mal viel zu mißtrauisch und auf der völlig falschen Fährte, das hat alles gar nichts zu bedeuten.  :-:

Wie geht's weiter?
- recycle etc. haben wir alles schon durch
- im Moment stürzen wir uns auf Driver de-registration, was vielleicht auch ganz gut hier (http://atnotes.de/index.php/topic,53506.0.html) reinpaßt, allerdings hat der Thread schon ein paar Tage auf dem Buckel. Wenn's Euch interessiert, kann ich dazu ja nochmal was schreiben.

Meine persönliche Spielwiese im Moment:
Ich bin darüber gestolpert, daß sich der Notes 8.53 Entwickler Client projektbezogen und teilweise scriptbezogen die Java Compiler Settings merkt. ( :-[ Jaja... jetzt, wo ich weiß, wonach ich suche, findet auch Frau g**gle was dazu *hust* ) Auch wenn das für alle Beteiligten hier ein alter Hut ist... mir war nicht klar, daß ich nicht einfach den Agent im 8ter Developer Client neu übersetzen kann und er dann auch mit JDK 1.6 Konformität läuft. Ich habe mir also gerade in den Kopf gesetzt, das mal ein wenig zu testen, ggf. kommt ja die R85 JVM einfach nicht so richtig mit dem alten JDK 1.3/4 Zeugs klar?

Tja, soviel dazu... ich stapf dann mal zurück an die Arbeit und kann wenn Ihr mögt, gerne mal ein Update zum aktuell offenen PMR geben ;)

Th.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us

Im Verlaufe der Konversation mit BigBlue hat man uns auch geraten, die im Projekt enthaltenen JAR's extern abzulegen im /jvm/lib/ext Verzeichnis und ja... das brachte was. Aber: wir wollen das nicht. Das Einbetten von JAR's in eine NotesDB ist eine von IBM angebotene Funktion und die soll bitteschönn auch richtig funktionieren. Hat ja auch alles prima geklappt in R7, warum nicht in R85?

/OT Ja, ich bin ein bischen stur.  ::) /OT

Kann ich überhaupt nicht nachvollziehen.
IT Systeme sollen die Geschäftsprozesse eines Unternehmens unterstützen.
Für dieses Ziel sollten die Anwendungen möglichst störungsfrei laufen.
Ende. Aus.
Mickey Maus.

Soooo.... jetzt noch ein paar Ergänzungen zum Thread selbst.
- Neben den LND (Lotus Notes Diagnostic Tools) zur Analyse von NSD Files gibts auch noch ISA (IBM Support Assistant), eine Art Framework zur Fehleranalyse von IBM Produkten. Im ISA kann man ein paar nette Analyse-Module zum Thema Java Dump Analyse runterladen und nutzen.
- Bei uns war es so, daß neben java/lang/ClassLoader auch noch java/security/Policy Unmengen java/util/Hashtable$Entry, byte[] und ein paar java/util/HashMap$Entry gefressen haben
- was passiert, wenn man JAR's in's /jvm/lib/ext legt? Üblicherweise steht im \jvm\lib\security\java.policy File folgendes:

Code
// Standard extensions get all permissions by default

grant codeBase "file:${java.home}/lib/ext/*" {
	permission java.security.AllPermission;
};
Wo hast Du denn das her? Der java.security ist es völlig Wumpe, ob die Klassen von einem höheren oder darunterliegenden Classloader geladen werden. 95% aller Java Agenten laufen auf dem Server. Wer benötigt wirklich signierten Code auf Servern, die ohnehin anderweitig abgesichert werden? Ich hab ausser vor ca. 9 Jahren für Applets oder für Swing Anwendungen nie in meinem Leben ein java.policy File angerührt. Man kann das mit einem Häckchen im Agenten selber regeln.
Java Classloader speichern Klassen in Hashtable-Entries und sie laden auch die policy files. Das ist also eine Folge des Classloader Memory Leaks.


--> Jetzt noch 1 und 1 zusammenzählen:
Leider zählst Du 1 und 1 auf Basis von Vorstellungen zusammen, die aus meiner Sicht mit der Realität nichts zu tun haben.
Die Beschäftigung der Grundlagen der JVM Laufzeitumgebung würd vermutlich mehr bringen als ein pseudo-intelektuelles Getüftel mit IBM Tools, deren output Du aus meiner Sicht nicht wirklich analysieren kannst.

UND JA. Wenn ich so einen Magischen Realismus lese, werde ich sauer.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline pedsola

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
    • anders und sehr GmbH - Internetagentur und eCollaboration
So hat geklappt. Ich musste den Server neu starten.

ein bisschen spät und hat mit der letzten Diskussion nicht viel zu tun aber vielleicht hilfreich für den ein oder anderen.
Amgr restart reicht aus, um die JARs im ext-Verzeichnis neu einzulesen.
Gruß
Pedro

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
UND JA. Wenn ich so einen Magischen Realismus lese, werde ich sauer.

Das möchte ich auf keinen Fall! Ich fasse daher meinen ersten Beitrag wie folgt zusammen und halte mich dabei streng an die Tatsachen:

Wir haben zu diesem Thema bei IBM mehrere PMR's eröffnet. Bisher haben wir unsere Probleme dadurch nicht nachvollziehbar erkären und lösen können.

Th.

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Hallo Th.

Lass dich von Axel (aka Pitiyankee) nicht verunsichern. Er liefert oft sehr wertvolle Inputes zu Problemen, aber ab und zu versteht man entweder nicht was er meint, bzw. benutzt er einen Thread einfach mal zu Dampf ablassen. Also einfach seine Postings mit Gelassenheit lesen, nicht persönlich nehmen und einen Nutzen aus seiner großen Erfahrung im Bereich verteilte Systeme Frameworks, Südamerika ;-) usw. ziehen.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz