====== Delegator and OutOfMemoryException ====== === Problem: === Wird in //relmäßigen Abständen// eine //OutOfmemory Exception// ausgelöst, handelt es sich meist um ein //natürliches Phänomen//. Während einer Laufzeit von 10m werden ca. 450 Prozesse bearbeitet. Da einem Prozess maximal ca. 1,6 GB Speicher zur Verfügung steht, kann es zu einem Speicherüberlauf kommen. === Symptome: === Regelmäßige OutOfMemoryException((Speicherüberlauf)) === Lösung === Die Lösung besteht darin, den simplen Delegate durch ein [[prozessdefinition:jobs:jobsteps:allgemein:DelegateQueued|QueuedDelegate]] zu ersetzen. Dieser ist in der Lage, Aufträge in eine temporäre Queue zurückzustellen. Dabei werden die Aufträge erst wieder gestartet, wenn die Queue wieder neue Aufträge bearbeiten kann. ^QueuedDelegate ^Properties und deren Bedeutung | |//QueueName//|Die Lastbalancierung wird nur innerhalb der gleich benannten Queue vorgenommen. Hier kann dadurch das System in verschiedene QueueBereiche aufgeteilt werden. Ansonsten Standard belassen: //DefaultQueue//| |//MaxQueueEntries//|Wie viele Prozesse max. gleichzeitig in dieser Queue aufgenommen werden.\\ \\ VORSICHT: Wenn man in 2 versch. jobs mit 2 versch Delegates die gleiche Queue ansteuert, aber unterschiedliche Max Einträge hat, ist das Verhalten unter Umständen etwas schwer nachvollziehbar, denn dann gilt für den jeweiligen Delegate eine andere Grenze der max. Auslastung bevor etwas tatsächlich gequeued wird. Also im Zweifel auf den gleichen Wert einstellen, dann wird das Verhalten etwas transparenter.| |//QueueWaitTimeout//|Da bei diesem Verfahren alle Prozesse eigentlich am laufen (nur auf Pause) bleiben, gibt dieser Wert an wie viele Minuten darauf gewartet werden soll, dass die Queue wieder Platz hat. Default = 30 (minuten). Nach dieser Zeit wird das Warten abgebrochen und ein Task erzeugt. Stehen gebliebene Dinge müssen in einem solchen Fall dann im Zweifel manuell wirder angeschoben werden.|