Uima Ruta Nicht genügend Speicher im Funkenkontext

9

Ich führe eine UIMA Anwendung auf Apache Funke. Es gibt Millionen von Seiten, die in Batches eingehen, die von UIMA RUTA zur Berechnung verarbeitet werden. Aber einige Zeit habe ich out of memory exception.It wirft Ausnahme, da es erfolgreich 2000 Seiten verarbeiten, aber einige Zeit auf 500 Seiten.

Anwendungsprotokoll

%Vor%

UIMA RUTA SCRIPT

%Vor%     
Gaurav 04.06.2017, 05:30
quelle

1 Antwort

2

Normalerweise können die Gründe für eine hohe Speichernutzung in UIMA Ruta in RutaBasic (viele Annotationen, Abdeckungsinformationen) oder in RuleMatch (ineffiziente Regeln, viele Regelelementübereinstimmungen) gefunden werden.

In diesem Beispiel scheint das Problem anderswo zu entstehen. Der Stacktrace zeigt an, dass der Speicher von einem disjunktiven Regelelement aufgebraucht ist, das neue Annotationen zum Speichern der Match-Informationen erfordert.

Es scheint, dass die Version von UIMA Ruta ziemlich alt ist, da die Zeilennummer überhaupt nicht mit der Quelle übereinstimmt, die ich betrachte.

Es gibt sieben (!!!) Aufrufe von continueOwnMatch im Stacktrace. Ich suchte nach einer Regel, die so etwas verursachen konnte, aber keine gefunden hat. Dies könnte ein alter Fehler sein, der in neueren Versionen behoben wurde, oder einige Vorverarbeitung hinzugefügt zusätzliche CW / SW / CAP-Anmerkungen.

Als erster Ratschlag würde ich zwei Dinge vorschlagen:

  1. Update auf UIMA Ruta 2.6.0
  2. Entfernen Sie alle disjunktiven Regelelemente

Die disjunktiven Regelelemente werden in Ihrem Skript nicht wirklich benötigt. Im Allgemeinen sollten sie überhaupt nicht verwendet werden, wenn sie nicht wirklich benötigt werden. Ich verwende sie überhaupt nicht in produktiven Regeln.

Anstelle von (SW | CW | CAP ) können Sie einfach W schreiben.

Anstelle von (SPECIAL{REGEXP("['\"-=()\[\]]")}| PM) können Sie ANY{OR(REGEXP("['\"-=()\[\]]"),IS(PM))} schreiben.

Die Verwendung von ANY als übereinstimmende Bedingung kann die Laufzeitleistung verringern. In diesem Beispiel könnten zwei Regeln anstelle des Regelelement-Umschreibens besser sein, z. B. etwas wie

%Vor%

(optionale Regelelemente am Anfang einer Regel ohne Anker in der Regel sind nicht optional)

Übrigens, es gibt viel Platz für die Optimierung Ihrer Regeln. Wenn ich raten müsste, würde ich sagen, dass Sie mindestens die Hälfte der Regeln und 90% aller erstellten Annotationen loswerden können, was auch die Speicherauslastung erheblich reduzieren würde.

HAFTUNGSAUSSCHLUSS: Ich bin ein Entwickler von UIMA Ruta

    
Peter Kluegl 08.06.2017, 19:54
quelle