BMF-RKSV-Technik / at-registrierkassen-mustercode

111 stars 39 forks source link

Prüftool 1.1.0 Speicherverbrauch? #644

Open ztp-mino opened 6 years ago

ztp-mino commented 6 years ago

Wenn ich die Version 1.1.0 benutze um ein 10.000.000 Belege DEP zu prüfen, bricht es bei der "Machine readable code validation" nach etwa 200.000 Belegen mit java.lang.OutOfMemoryError: GC overhead limit exceeded ab. Ich hab folgenden Aufruf verwendet:

java -Xms32G -Xmx32G -jar regkassen-verification-1.1.0/regkassen-verification-depformat-1.1.0.jar -c dep_big/crypto_big.json -i dep_big/dep_big.json -o out

Nun soll der Speicherverbrauch ja nicht ganz konstant sein, aber ich kann mir nicht vorstellen, dass das Ding bei 32G Heapsize nicht die IDs von 200.000 Belegen zwischenspeichern kann...

Nun kann man den GC Error abdrehen, aber das löst das Problem nicht. Es gelingt dem Garbage Collector nicht ausreichend Speicher frei zu machen, was IMO auf ein Memory Leak hindeutet.

Die Prüfung wird den Ausgaben nach zu urteilen auch immer langsamer. Erst werden mehrere 10.000 Belege in einem durch geprüft, gegen Ende werden grade mal 100 geprüft bevor das Ding für eine Weile scheinbar steht.

asitplus-pteufl commented 6 years ago

Vielen Dank für den Hinweis. Wurde mit V1.1.1 behoben (soeben freigegeben).

ztp-mino commented 6 years ago

Ich teste gerade das 10 Mio. DEP mit der neuen Version und den gleichen Parametern. Soweit keine Hänger und keine GC Errors, wird ein paar Stunden dauern, melde mich nochmal wenns durch ist.

Allerdings streikt das Tool mit weniger Speicher (probiert mit 8GB und 12GB) und fängt nichtmal an die Belege zu prüfen. Kann es sein, dass das DEP zu Beginn als ganzes gelesen wird und in Objekte geparst wird? Und dann nur die Prüfergebnisse nach und nach generiert, geschrieben und verworfen werden? Das DEP ist auf der Platte etwa 3GB groß, d.h. 8-12GB für Unicode Strings und diversen Objekt-Overhead klingt erstmal plausibel...

ztp-mino commented 6 years ago

Ist durchgelaufen, hat etwa 9 Stunden gedauert. Vielen Dank!

Alex1130 commented 6 years ago

Betreffend der Ausgabe von Prüfergebnissen: wäre es möglich ein zusätzliches verbosity flag (oder verbosity levels) für die nächste Version anzudenken? zB eine minimale oder keine Ausgabe wenn das Ergebnis PASS ist und Ausgabe inklusive Details für FAIL Ergebnisse? Ein output von >110GB für 60.000 Belege ist doch recht umfangreich (alles PASS)