2016-01-29 15 views
6

Ich habe ein jhipster-Projekt und habe einige Entitäten hinzugefügt.
Meine Leistungen sind, weil diese Warnmeldung sehr langsam:Das konfigurierte Limit von 1,000 Objektreferenzen wurde erreicht, als ich versuchte, die Größe des Objektgraphen zu berechnen.

Die konfigurierte Grenze von 1.000 Objektreferenzen erreicht wurde beim Versuch, die Größe des Objektgraphen zu berechnen. Wenn der Sizing-Vorgang fortgesetzt wird, kann eine schwerwiegende Leistungsbeeinträchtigung auftreten. Dies kann vermieden werden, indem CacheEnger oder Cache < sizeOfPolicy> elements maxDepthExceededBehavior auf "Abbrechen" gesetzt oder Stopppunkte mit @IgnoreSizeOf-Annotationen hinzugefügt werden. Wenn die Leistungsverschlechterung beim konfigurierten Grenzwert kein Problem darstellt, erhöhen Sie den Grenzwert mithilfe des Attributs CacheManager oder Cache < sizeOfPolicy> elements maxDepth. Weitere Informationen finden Sie in der Ehcache-Konfigurationsdokumentation.

Was kann ich ändern, um diese Grenze zu erhöhen oder Cache in meinem Projekt zu stornieren?

+0

Abbrechen Cache ist nicht das, was man normalerweise Dinge zu beschleunigen :) – Gavriel

+0

Sie müssen angeben, wo Sie Caching und auf welche Art von Objekten verwenden, so dass Sie verstehen, warum Sie einen so großen Graphen auf einmal cachen. –

Antwort

3

Sie können das folgende Tag in Ihre resources/ehcache.xml hinzufügen. Eigenschaft maxDepthExceededBehavior = abbrechen vermeidet die Verlangsamung Ihrer Dienste. Sie können auch die maxDepth ändern, um das Limit zu erhöhen.

<sizeOfPolicy maxDepth="1000" maxDepthExceededBehavior="abort" /> 
1

Hier ist, was Ehcache official documentation sagt über Sizing von im Cache gespeicherten Einträge:

Sizing von gespeicherten Eingaben

Elemente in einem Speicher begrenzte Cache setzen ihre Speichergrößen gemessen haben. Die gesamte dem Cache hinzugefügte Element-Instanz wird gemessen, einschließlich einschließlich Schlüssel und Wert, sowie der Speicherbedarf für das Hinzufügen dieser Instanz zu internen Datenstrukturen. Schlüssel und Wert werden als Objektgraphen gemessen - jeder Referenz wird gefolgt und das Objekt Referenz auch gemessen. Dies geht rekursiv weiter.

Gemeinsame Referenzen werden von jeder Klasse, die darauf verweist, gemessen. Dies wird zu einer Übertreibung führen. Gemeinsame Referenzen sollten daher ignoriert werden.

Konfiguration zur Begrenzung des Traversed Objektgraph

Sizing Caches durchqueren Objektgraphen beinhaltet, ein Prozess, der mit Anmerkungen begrenzt werden kann. Dieser Prozess kann sowohl auf der CacheManager- als auch auf der Cacheebene gesteuert werden.

Kontrolle, wie tief die Größe-of-Engine kann gehen, wenn auf Haufen Elemente Sizing, indem folgende Element auf der Cachemanager Ebene

<sizeOfPolicy maxDepth="100" maxDepthExceededBehavior="abort" /> 

Dieses Element hat die folgenden Attribute:

  • maxDepth steuert, wie viele verknüpfte Objekte besucht werden können, bevor die Größe der Engine eine Aktion ausführt. Dieses Attribut ist erforderlich.

  • maxDepthExceededBehavior die angibt, was passiert, wenn die maximale Tiefe beim Dimensionieren eines Objektdiagramms überschritten wird. Mögliche Werte für diese abgelegt sind:

    • continue die die Größe-Motor erzwingt eine Warnung zu protokollieren und die Dimensionierung Betrieb fortzusetzen. Wenn dieses Attribut nicht angegeben ist, ist continue das Verhalten

    • abort verwendet, die die Größen von zwingt Motor das Sizing abzubrechen, eine Warnung protokollieren und den Cache markiert als nicht korrekt Tracking Speichernutzung. Mit dieser Einstellung Ehcache.hasAbortedSizeOf() kehrt true

Die SizeOf Politik kann (direkt unter <ehcache>) und an der Cache-Ebene an der Cache-Manager-Ebene konfiguriert werden (unter <cache> oder <defaultCache>). Die Cache-Richtlinie überschreibt immer den Cache-Manager , wenn beide gesetzt sind. Dieses Element hat keine Auswirkungen auf verteilte Caches.

+1

Bitte versuchen Sie etwas mehr Formatierung, da eine Textwand schwer zu lesen ist. –