Autor Thema: Speicherverwaltung Java + Lotus Notes Domino  (Gelesen 15983 mal)

Offline Florian_H

  • Frischling
  • *
  • Beiträge: 5
Speicherverwaltung Java + Lotus Notes Domino
« am: 31.01.06 - 16:11:22 »
Hallo

Dank der Suche haben sich einige Fragen bei mir schon vorher geklärt allerdings stehe ich noch vor einem Problem und zwar geht es um Folgendes:

Im Rahmen eines Projektes sollen aus einer Notes Datenbank die selektierten Dokumente mithilfe von Charts ausgewertet werden.
Ein Pflichtenheft muss dafür zuerst erstellt werden und ich hänge noch am Mengengerüst.

Nehmen wir an ein Benutzer wählt 1000 Dokumente aus um diese Auszuwerten ein Textfeld in Notes hat maximal 32KB, 4 Felder sidn für die Auswertung relevant. Macht:

32KB x 4 x 1000 = 128MB

Bis die 128MB vom Server bei einer Geschwindigkeit von 2Mbit in mein Java Programme geladen sind dauert das ne ganze Weile, soll es aber nicht.
Wie schaut die Speicherverwaltung der JVM aus ? Kann ich da mit dem Garbage Collector oder der Recycle Methode arbeiten.
Was ist mit der Speicherverwaltung der JVM überhaupt möglich ?

Der Chef meint man kann den Kunden ja nicht 60 Minuten vom Arbeitsplatz fernhalten bis er sein Diagramm auswerten kann.
Klar hat er da Recht, doch einerseits sollen unheimlich viele Dokumente ausgewertet werden und andererseits soll sich das schnell von statten gehen.

Vielleicht hat ja jemand eine Lösung parat für mein Problem.

Danke


Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #1 am: 31.01.06 - 16:16:09 »
Wo kommen die 2 Mbit her?  ???
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 Florian_H

  • Frischling
  • *
  • Beiträge: 5
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #2 am: 31.01.06 - 16:18:52 »
Damit meinte ich die Geschwindigkeit von DSL die der Server via Internet zum Client hat. Kann auch ruhig ignoriert werden is jetzt nicht so wichtig.
Es geht mit eher um die Speicherverwaltung.

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #3 am: 31.01.06 - 16:19:54 »
Und was wertest Du denn in Charts aus aus Textfeldern, die 32 kB Inhalt haben? Bist Du sicher, dass solche "Füllstände" überhaupt erreicht werden können (in vito)?

Offline Florian_H

  • Frischling
  • *
  • Beiträge: 5
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #4 am: 31.01.06 - 16:23:34 »
Klar werden 32KB nicht wirklich erreicht, aber da es möglich ist diesen Wert doch zu erreichen, soll ich von diesem Fall ausgehen, damit der Kunde ziemlich genau weiss wieviel Speicherplatz er benötigt usw.

Hier mal mein bissheriges Mengengerüst:

Input
Das Analysetool greift auf den „Audit-Trail“ der Dokumente zu und liest die vier, für die Auswertung relevanten Textfelder aus. Ein Textfeld ist unter Lotus Notes auf 32KB beschränkt. Pro angewähltes Dokument fallen somit also 128 KB (4 x 32KB) Speicherplatzbedarf an. Somit ist es also auch möglich relativ große Workflows mit vielen Dokumenten auszuwerten. Eine Datenauslagerung ist nicht notwendig.

Bsp.:
Speicherbedarf bei 1000 angewählten Dokumenten:
4 x 32KB x 1000 = 128 MB

Output
Das Analyse Tool wird in der Lage sein 15 verschiedene Status pro Ansicht darzustellen, ohne dass das Diagramm überladen und dadurch unübersichtlich wird. Für die Auswertung größerer Workflows ist eine Darstellung über mehrere Seiten geplant.
Des Weiteren ist zu bedenken, dass eine gespeicherte Auswertung/Grafik ca. 500 KB Festplattenspeicher benötigt.
« Letzte Änderung: 31.01.06 - 16:28:46 von Florian_H »

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #5 am: 31.01.06 - 16:34:07 »
Zugriff via IIOP, oder ist es ein in eine Notes-DB eingebettetes Applet?
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 Florian_H

  • Frischling
  • *
  • Beiträge: 5
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #6 am: 31.01.06 - 16:36:13 »
Das ganze soll als Agent gestartet werden, der eine Java Swing Gui aufbaut.

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #7 am: 31.01.06 - 16:37:35 »
Also in der DB? Dann würd ich doch die DB als lokale Replik halten, dann brauchst keine Daten über Leitungen saugen und das Laden der Daten in den Java-Agent ist blitzartig erledigt.
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 Florian_H

  • Frischling
  • *
  • Beiträge: 5
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #8 am: 31.01.06 - 16:49:22 »
Noch eine Frage anbei:

Oder 2

1. Wo liegt den eingentlich die Begrenzung der JVM was Speicherplatz betrifft ?

2. Wenn ich die Dokuemente mit einer DocumentCollection in einer Schleife durchlaufe, lese ich die Dokumente doch nur sequentiell aus, ist dann der Speicherplatz verbraucht noch relevant  ?

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #9 am: 31.01.06 - 17:08:49 »
Die 32 Kb Rechnung erscheint mir unrealistisch. Die meisten Notes-Felder haben deutlich weniger Inhalt.
V.a. Felder die für eine statistische Auswertung benötigt werden. Das dürften doch meist kleine Strings oder Zahlen sein, oder?
 
Probiers doch einfach mal mit einem kleineren Satz an realistischen Testdaten aus.

Ob Teile dieser Daten zwischendurch garbage collected werden können, hängt von dem Progrämmsche ab, dass die Graphiken generiert.   
Ausserdem kannst du vielleicht Daten auf dem Server cachen, um die Netzwerklatenz zu verringern. Notes-Dokumente haben ein lastUpdate property.

Wo die genaue Obergrenze ist, weiss ich nicht. Jedenfalls kannst du aber den JVM-Heap Speicher per -Xmx (heap space) und -Xms (initial heap space) verändern. Beim starten der VM. java -X etc.
Beispiel
java -Xms256m -Xmx512m DeinProg

gibt dem Programm 256 MegaByte Heap Speicher beim Starten und maximal 512 MegaByte. Wenn es mehr als 512 MegaByte braucht, dann gibt es eine OutOfMemoryException.
Ich setz z.B. Eclipse grundsätzlich hoch.
 
« Letzte Änderung: 31.01.06 - 17:10:29 von kennwort »
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 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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #10 am: 01.02.06 - 08:31:41 »
Wenn du über 1000 Dokumente liest in einem Java Agenten MUSST du mit Recycle arbeiten sonst ist der Out of Memory vorprogrammiert.

Merksatz: Zugriff auf Notes Objekte ausserhalb von Schleifen recycle nicht nötig.
Zugriff auf Notes Objekte in Schleifen. Recycle unbedingt erforderlich.

Was du mit "Kann ich hier mit Garbage Collection arbeiten" meinst ist mir schleierhaft. So weit ich weiß arbeitet der GC immer.

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 Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #11 am: 01.02.06 - 11:27:52 »
@Ralf

bist Du sicher, dass außerhalb von Schleifen nicht recycle't werden muss?
Das C-Objekt kann doch so oder so nicht zerstört werden. Damit dauert es außerhalb von Schleifen sicher länger, aber grundsätzlich kommt der Speicherüberlauf irgendwann, da der Speicher ja nicht freigegeben wird.

Oder bin ich hier falsch informiert?

Thomas
+++To be human is more important than to be important!+++

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #12 am: 01.02.06 - 11:32:27 »
@Thomas!

In diesem Thread geht es um einen Agenten und es ist tatsächlich so, dass du in einem Agenten im Prinzip nicht recyceln musst zumindest laut Agent FAQ auf Notes.net, da sich Notes um das Recyceln selber kümmert. In allen anderen Java Programmen, Servlets und JSP sollte man immer zum Schluß die Session recyceln.

Aufpassen muß der Ursprungsfrager nur höllisch wenn er Swing einsetzt und auch vom Event Thread auf Notes zugreifen will. Das erfordert besondere Vorkehrungen und würde ich ehrlich gesagt vermeiden, da es nicht best practise entspricht.

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #13 am: 01.02.06 - 11:37:08 »
bist Du sicher, dass außerhalb von Schleifen nicht recycle't werden muss?
Das C-Objekt kann doch so oder so nicht zerstört werden. Damit dauert es außerhalb von Schleifen sicher länger, aber grundsätzlich kommt der Speicherüberlauf irgendwann, da der Speicher ja nicht freigegeben wird.

Oder bin ich hier falsch informiert?

Ich würd sagen, dass normalerweise, die Menge der erzeugten Objekte nicht so hoch ist.
Nur in Schleifen werden halt quasi von Natur aus sehr viele Objekte erzeugt.
Und wo mehr Dreck erzeugt wird, muss man eben mehr aufräumen.
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 Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #14 am: 01.02.06 - 15:31:56 »
Das ist mir schon klar.
Aber sauber programmiert ist so eine Anwendung für mich, wenn sie keine Speicherleichen hinterlässt, egal wie wenige das sind oder wie klein die auch sein mögen.

Aber ich will hier keine Grundsatzdisskussion anzetteln...
 :-X

Thomas
+++To be human is more important than to be important!+++

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #15 am: 01.02.06 - 15:54:16 »
Hallo Thomas!

Ich denke du hast auf Axel geantwortet. Aber hier nochmal zur Klarstellung. Meine Angaben bezogen sich auf Agenten und hier steht in der Agent FAQ ganz klar, dass man sich wenn man alle Objekte aus der Session des Agents gewinnt sich um Recycle keine Gedanken machen muß, ausser man erstellt soviele Objekte, dass man Memoryprobleme bekommt. Wenn der Agent beendet ist, kümmert sich Notes um das Recycle der Session. Genauso reicht es in einfachen Javprogrammen die keine Schleifen und ähnliches haben, am Ende des Programms die Session zu recyceln, da diese alle abhängigen Objekte mitrecycelt.

Recyceln im Programm kann sinnvoll sein, aber auch sehr gefährlich nämlich dann wenn man Objekte die man noch verwenden will recycelt hat.

Ist mir selber schon passiert in grossen Programmen, das ich auf ein Objekt mehrere Referenzen hat. Dann habe ich bei einer Referenz weil ich ja ein braver Recycler bin recycle aufgerufen und wie ich dann über eine andere Referenz auf das Objekt zugreifen wollte. Bumm

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #16 am: 01.02.06 - 16:24:03 »
Wieso Grundsatzdiskussion?

In Java braucht man sich nur dahingehend darum kümmern, dass man nicht zu viele Objekte erzeugt und einen gewissen Überblick behält, wie die Referenzen gesetzt sind. Ein Objekt wird garbage collected, wenn es null ist und kein anderes Objekt mehr eine Referenz auf es hält (wenn ich mich recht erinnere).
Bei Notes-Objekten ist das ein bischen anders. Man braucht diese recycle()-Methode.

Speicherallokation ist im Grunde ein Scope/Lebenszyklus-Problem.
Objekte haben im Programm meist sehr unterschiedliche Lebenszyklen.
 
Schleifen besitzen nun einen klar definierten engen scope der mehrmals durchlaufen wird.
Objekte, die im scope des Schleifenkörpers erzeugt wurden, haben einen Lebenszyklus von genau einer Iteration dieser Schleife.

In
Code
for (int i=0; i < 10; i++) {
Document doc = vw.getNthDocument(i)
}
werden über die eine Zeile in der Schleife eine Menge lokaler Objekte erzeugt, die nur für genau eine Iteration der Schleife im aktiven scope sind und danach nicht mehr gebraucht werden. Man kann sie auch nicht referenzieren. Sie sind lebenszyklustechnisch eindeutig auf dem Weg in den Himmel (katholisch gesprochen).
 
Zwar verweist immer die gleiche Referenzvariable auf besagte Objekte. Die Objekte sind aber unterschiedlich!!!
In Java ist das ein geringeres Problem, da sie automatisch garbage-collected werden. Notes-Java-Objekte benötigen aber den Aufruf von recycle(), um wirklich garbage collected werden zu können (vereinfacht gesprochen).
Wegen dem schnellen scope-Wechsel in Schleifen, macht der häufige Aufruf von recycle() sehr viel Sinn und das ist in keinster Weise eine irgendwie unscharfe Idee.
   
So ungefähr jedenfalls.
« Letzte Änderung: 01.02.06 - 16:25:40 von kennwort »
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 Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #17 am: 01.02.06 - 16:45:59 »
@Ralf

ich bin da wohl in meinem Denken ein bisschen versaut,weil ich in Java-Agenten meist mit eigenen DIIOP-Sessions arbeite (Remote-Zugriffe in 5'er Server-Landschaften), bin ich gezwungen, alle Objekte selber zu recyclen. Auch bei der Arbeit mit der API aus anderen Java-Applikationen ist es meines Wissens nach nötig, alle Objekte zu recyclen, da das Recyclen der Session alleine nur die Session, nicht die daraus  erworbenen Objekte betrifft.

@Axel
Die Java-Objekte an sich werden ja schon von der Garbage-Collection zerstört, oder? Nur die C-Objekte für die nativen Zugriffe benötigen das Recyclen, da ja C-Objekte immer explizit zerstört werden müssen.

Das ist übrigens eine Frage, die mich schon länger beschäftigt: Hätte man die API nicht grundsätzlich so aufbauen können, dass in der finalize-Methode des Objekts das Recyclen mit durchgeführt wird? Dann würde die Garbage-Collection auch die Speicherbereinigung übernehmen.

Thomas
+++To be human is more important than to be important!+++

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #18 am: 01.02.06 - 16:53:10 »
@Thomas!

Nein Recyceln der Session reicht. Es gab mal in frühren 5er ein paar Ausnahmen, aber nichts tragisches auf Grund von Bugs. Aber in 6er funktioniert das recyceln von Session einwandfrei. Unsere gesamte Webseite ist auf diesen Mechanismus aufgebaut und selbst bei tausenden Zugriffen am Tag wo die Session und viele abhängige Objekte tausende mal erstellt und über die Session recycelt wurden treten keine Memory leaks auf.

Bezüglich des GC hast du Recht nur leider kann man das finalize nicht verwenden, da finalize vom GC Thread aufgerufen wird und das recycle in dem Thread gemacht werden soll in dem die Session erstellt wurde. Ich mach prinzipiell in jedem Thread eine eigene Session.

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
Re: Speicherverwaltung Java + Lotus Notes Domino
« Antwort #19 am: 01.02.06 - 17:11:04 »

@Axel
Die Java-Objekte an sich werden ja schon von der Garbage-Collection zerstört, oder? Nur die C-Objekte für die nativen Zugriffe benötigen das Recyclen, da ja C-Objekte immer explizit zerstört werden müssen.
Ralfs Erklärung mit den Threads kannte ich noch gar nicht. Das hört sich irgendwie schlüssig an.

Ich sah das bisher so (und ich bin mir nicht 100% sicher, ob das stimmt): In einem Garbage Collection Lauf werden gar nicht alle Objekte-eligible-for-garbage-collection garbage collected. Kleinere Objekte bleiben liegen. Das hat Optimierungsgründe. Aus Sicht des GC sind aber die Notes Wrapper um die C-Objekte kleine Objekte (obwohl sie massiv C-Zeugs binden, aber das sieht der GC nicht).
Das Problem ist, dass sie zulange liegen bleiben.
Und beim stoppen der VM wird nicht unbedingt auf allen Objekten finalize() aufgerufen. Auch übrigens dann nicht, wenn im finalize() vorher eine Exception geworfen wurde.
Man sollte sich nicht auf finalize() verlassen, es sei denn, man weiss wirklich was man tut. Ich habe die finalize() Methode noch nie benutzt (ausser für kleinere Tests). 
Wie das meiste in diesem Theater, ist garbage-collection nicht so einfach wie es zunächst aussieht.

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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz