# Performance Probleme wegen vieler Objekte



## OnDemand (5. Okt 2016)

hallo zusammen,

stoße mit meinem Server langsam an seine Grenzen. Ständig Kapazitätsprobleme und die CPU wird von Glassfish fast zu 100% genutzt. Jetzt muss ich meine Programmierung hinterfragen...

Ich lese ca 50 Txt Dateien und erstelle für jede Zeile ein Object. ZB jede Datei hat 10.000 Zeilen, jede Zeile ist ein Auto welches zum Objekt wird mit Ps, Marke etc. Ca 30 Getter und Setter.

Hier fangen schon die ersten Probleme an, zu viele Objekte! Server lahmt langsam, xmx ist auf 30GB aber trotzdem krachts! 

Sollte man jetzt die Daten schon in einer DB zwischenspeichern?

Die Objekte werden dann mit externen Datenbanken abgeglichen, und da aktualisiert wenn sich Preise oder Lieferstati geändert haben. Dann ist das Objekt unnütz und kann verschwinden. 

Da die Daten nicht ständig gleich sind und bei jedem Lesen neuenWerten haben, habe ich darauf verzichtet diese persistent zu machen.

Freue mich auf konstruktive Vorschläge! Wann speichert Ihr Daten in einer DB ab? Würde das abspeichern Kapazitätsprobleme mindern?


----------



## stg (5. Okt 2016)

Brauchst du denn alle Daten _gleichzeitig_ im Speicher? Und brauchst du überhaupt alle Daten aus deinen Text-Files?
Nach deiner Problem-Beschreibung zu urteilen kannst du das doch auch alles häppchenweise machen ohne großenn Memory Footprint..

Hast du mal geschaut, wie viel Speicher deine Objecte tatsächlich belegen? Um die 30GB vollzubekommen müsste da ja schon einiges drin stehen....

Wenn du 50 Text-Files mit je 10.000 Zeilen einliest und währenddessen noch anderes machst, dann geht da natürlich kurzzeitig die CPU Auslastung hoch. Wäre doch auch doof, wenn dein Programm nicht all das an Resourcen nutzt, was es kriegen kann, sonst hättest du da ja quasi eine schon von Haus aus eingebaute Performance-Bremse drin.



NicoDeluxe hat gesagt.:


> Sollte man jetzt die Daten schon in einer DB zwischenspeichern?



Was erhoffst du dir davon? Ob du jetzt 50.000 "Objekte" aus einer Text-Datei oder aus einer Datenbank ausliest wirkt sich ja nicht auf den Speicherverbrauch deiner Anwendung aus.




NicoDeluxe hat gesagt.:


> Würde das abspeichern Kapazitätsprobleme mindern?


Kapazität von was jetzt genau?



NicoDeluxe hat gesagt.:


> Wann speichert Ihr Daten in einer DB ab?


Wenn es sinnvoll ist.
Siehe hier: http://programmers.stackexchange.com/a/190483/244281


----------



## OnDemand (6. Okt 2016)

Hallo, morgen Stg,
ich brauche sie nicht alle gleichzeitig. Aber ich habe alle Objekte einer List geaddet um diese mit der DB abzugleichen (was fehlt in der DB, was muss aus der Liste neu in die DB gehen und fehlende Objekte aus der List, sollten in der DB gelöscht werden)

Werde statt Objecte zu List zu schreiben, eine Liste mit String erstellen, welche die Artikelnummern behinhaltet. 
Werde mal die Datei lesen; Erste Zeile ein Objekt erstellen -> an die DB geben und die SKU an die List hängen. Nächste Zeile das gleiche. So ist ja eigentlich immer nur 1 Objekt im Speicher.


----------



## OnDemand (8. Okt 2016)

Hallo,

hab es jetzt mal umprogrammiert. von vorher 100.000 Objekte bin ich beim Profiling nun bei 1000 Objekten, welche alle paar Sekunden wieder auf 0 gehen also kommt wahrscheinlich der Garbage Collector um die Ecke.

Edit: Ich erstelle je CSV ein Auto-Objekt, übergebe es an die DB. In der nächsten Zeile wird das Objekt überschrieben. Somit habe ich nur noch 1 Objekt  Mein Gott hatte ich nen Denkfehler!


----------

