Frage

Ich verwende eine NLP-Bibliothek (Stanford NER), die OOM-Fehler für seltene Eingabedokumente führt.

Ich plane, um schließlich diese Dokumente zu isolieren und herauszufinden, was über sie die Fehler verursacht, aber das ist schwer zu tun (ich bin in Hadoop läuft, damit ich weiß, nur der Fehler 17% durch gespalten 379/500 oder etwas auftritt so wie das). Als Zwischenlösung, würde ich in der Lage sein wie ein CPU und Speicherlimit auf diesen bestimmten Anruf zu übernehmen.

Ich bin mir nicht sicher, was der beste Weg, dies würde zu tun. Mein erstes ist aber einen fester Thread-Pool von einem Thread zu erstellen und verwenden Sie die zeitlich get () auf Zukunft. Dies würde zumindest geben Sie mir eine Wanduhr Grenze, die ein wenig wahrscheinlich helfen würde.

Meine Frage ist, ob es eine Möglichkeit, als dies mit einem vernünftigen Aufwand besser zu machen ist.

War es hilfreich?

Lösung

Sie einfach die OutOfMemoryError fangen, melden Sie sich, welches Dokument Sie waren auf, dann zum nächsten bewegen. Der Garbage Collector wird sicherstellen, dass Sie genügend Speicher für das nächste Dokument haben.

(Dies ist eine der Strategien, die ich mit der Stanford Abhängigkeit Parser verwenden, um den nächsten Satz zu bewegen, wenn ein Satz zu lang oder gewunden ist zu analysieren.)

Andere Tipps

Ich bin mit Hadoop nicht vertraut, aber vergessen Sie nicht, dass Ihre JVM wird eine implizite obere Speichergrenze auf sie (64Mb für einen Server, wenn ich mich recht erinnere) auferlegt haben. Ich würde überprüfen, welche Speicherkonfiguration Ihre JVM läuft mit (Optionen hier )

Sie können dies umgehen, indem die obere Speichergrenze Angabe so:

java -Xmx512m

auf (sagen wir) den Grenzwert zu 512Mb.

Einstellung der CPU-Zuordnung ist außerhalb des Zuständigkeitsbereichs der JVM und wird ein OS-spezifischen Mechanismus sein (wenn man es überhaupt tun kann)

Wenn Sie diese Aufträge parallel von einer JVM sind Dispatching dann ein Single-Thread ausgeführt wird (oder begrenzte Gewinde) Threadpool können Sie auch helfen. Jedoch (wieder) dies ist abhängig von Ihrer Implementierung und weitere Informationen erforderlich sind.

Wenn alles, was Sie zu tun versuchen ist, herauszufinden, welche Dokumente sind abstürzt, sollten Sie die Anrufprotokollierung um auf die NLP-Bibliothek setzen „über Dokument x abzubilden“. Wenn Sie die OOM sehen, werden die Protokolle für die Mapper das Dokument des Schicksals enthalten. Wie Sie gesagt haben, sollten Sie dann bestimmen, welche Eigenschaften dieses Dokument die Bibliothek zum Absturz bringen.

Nach meiner Erfahrung, vor allem, wenn die Dokumente von Menschen im Internet erstellt wurden, werden Sie einige verrückte riesige Dokument irgendwo finden. Zu diesem Zeitpunkt müssen Sie entscheiden, was mit solchen Dokumenten zu tun; entweder sie zu ignorieren, sie vielleicht gestutzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top