AWT Exception in der Eventqueue

VfL_Freak

Top Contributor
Moin,

ich bin eben auf einen recht seltsamen Fehler aufmerksam gemacht worden, der mit unserer Software auf einem bestimmten Rechner (zumindest bis jetzt) auftritt!
Das Programm kann zwar noch bedient werden, aber mehrere Timer regieren nicht und die Anzeige friert ein.
Bild der Java-Konsole siehe Anlage.
  • Von welchen Handles ist denn hier die Rede ??
    Im Taskmanager wurden zu dem Zeitpunkt ca. 540 Handles angezeigt (initial so um die 500), die sollten es doch wohl nicht sein ...
  • allerdings war der Speicherverbrauch auf ca. 320.000 k angestiegen (von initial ca. 100.000 k). Gestartet wird es in der JNLP mit 'initial-heap 64m' und 'max-heap 512m'
Hat irgendwer eine Idee, wie man hier weiter vorgehen kann?

Danke und Gruß
Klaus
 

Anhänge

  • error.JPG
    error.JPG
    76,6 KB · Aufrufe: 52
Moin,

ich lasse nebenbei auch 'jconsole' rsp. 'jvisualvm' mitlaufen, aber so richtig haben mich die beiden auch nicht weitergebracht.

Habe im Taskmanger gesehen, dass die Einträge in der Spalte "BENUTZER-Objekte" langsam hochlaufen.
Laut der Hilfe des Taskmanagers sind BENUTZER-Objekte Objekte aus dem Fenster-Manager, die Fenster, Menüs, Cursor, Symbole, Hooks, Beschleuniger, Monitore, Tastaturlayouts und andere interne Objekte enthalten

Hat jemand eine Idee, wie ich sie identifiziereb kann ??

Danke und Gruß
Klaus
 
Das habe ich noch nie gesehen, aber ich schätze mal, man sollte den Code auch mal dazu sehen.
Hast du was rausgefunden, was die Exception aussagt und was sie auslöst?
 
Moin Flown,
Das habe ich noch nie gesehen, aber ich schätze mal, man sollte den Code auch mal dazu sehen
tja, das wird schwierig ... 🙄
Mal abgesehen davon, dass ich ihn nicht veröffentlichen dürfte, umfasst er insgesamt geschätzte 80.000 bis 100.000 Zeilen.
Ich habe nicht wirklich eine Idee, wo und wonach ich eigentlich suchen soll!

Hast du was rausgefunden, was die Exception aussagt und was sie auslöst?
Na ja, die Hinweise auf die Art dieser "Window Managerobjekte" sind sehr dünn (vor allem bei Java) - vom Auslösen ganz zu schweigen 🙁
Das wäre eigentlich genau das, wonach ich suche ...

Habe eigentlich nur den dunklen Verdacht, dass das Verhalten mit den erwähnten "BENUTZER-Objekten" im Taskmanager korrespondiert ...

Danke und Gruß
Klaus
 
Moin Flown,
Hast du das schon auf mehr Maschinen probiert?
Inzwischen ja ...
Ich habe es gestern nachmittag auf hier auf meinen beiden Rechnern ansatzweise nachvollziehen können (Win7 x64 und XP x32) ...
Als Java-Version ist bei mir die 8_111 aktiv, bei meinem Chef (auf dem ursprüglichen Rechner) 8_73 mit Win7 x64 !

Sieht für mich auch nach einem richtigen Leck aus, da die Anzahl dieser BENUTZTER-Objekte (und auch der Speicher) langsam, aber kontinuierlich ansteigt.
Der Speicherverbrauch scheint noch nicht wirklich kritisch zu sein. In der JNLP sind MIN=64M und MAX=512M vorgegeben. Der reine Heap steigt lt. jvisualvm von anfangs 40-60 M auch auf vlt. 150 M an (über 3 - 4 Std. Laufzeit), aber bei den BENUTZER-Objekten scheint ist bei 10000 Schluß! Dies ist ja wohl der Standard-Wert in der Registry. Natürlich könnte ich ihn auch erhöhen, aber das löst natürlich nicht das grundlegende Problem ... 😳

Ist es eine schwer asynchrone Applikation?
Ja, im Prinzip schon!
Es laufen grundlegend zwei große Timer!
Einer fragt über einen C++-Server die Datenbank nach neuen Meldungen ab, holt diese ggf. und zeigt sie an.
Der zweite fragt bei einem anderen Java-Programm permanent den jeweiligen Gesamt-Zustand des Systems an (da wir aus Sicherheitsgründen mehrere redundante Colocation betreiben, muss jeweils ermittelt werden, welche die aktive Colocation ist).
Wenn dann beispielsweise eine Meldung angezeigt wird, wird bspw. der zweite Timer während dieser Anzeigezeit gestoppt.

Hinzu kommt, dass je nach Meldungstyp und zugeordneter Geräteklasse völlig unterschiedliche Bedingungen zu beachten sind 🙁
Die Anwendung selbst existiert in dieser Form seit mind. 15 Jahren (mit ständigen Umbauten und Erweiterungen natürlich). Von daher kann/will auch nicht ausschließen, dass dieses Problem schon ewig existiert, nur noch nie bemerkt wurde. Es tritt auch im Wesentlichen auch nur beim genannten Streßtest auf, bei dem Meldungen fast im Sekundentakt angezeigt und automatisiert wieder beendet werden (auch diese Automatik mag Fehler enthalten).

Mein großes Problem ist halt, irgendeinen Ansatz zu finden, WO ich WAS in den Sourcen (immerhin rund 100000 Zeilen, von denen ca. 20 - 40 % relevant sein könnten) eigentlich suchen soll ...

Gruß Klaus
 
Also für mich sieht das so aus, als ob du GUI Komponenten immer wieder neu zeichnest verwirfst, aber trotzdem noch im Speicher hast.
So als ob du Bilder immer neu lädst, aber nicht mehr freigeben kannst, weil sie irgendwo noch live referenziert werden.
 
Hallo Flown,
ok, das ist wohl eine Erklärung ... das Problem ist leider nur, diese Komponenten zu identifizieren.
Leider ist das Ganze nicht mein Code, ich habe ihn nur von geraumer Zeit übernommen ..... 🙁

Habe heute in einem anderen Forum den Hinweis auf den "Memory Analyzer (MAT)" von Eclipse und will mich da morgen mal einarbeiten.
Ebenso kam ein Hinweis auf diesen Artikel (http://www.eclipse.org/articles/swt-design-2/swt-design-2.html), den ich aber auch erst noch durchackern muss ...

Danke und Gruß
Klaus
 

Zurück
Oben