2016-06-15 6 views
0

Ich benutze Tess4j 3.0.0 mit Tesseract 3.04 in meiner Java-Anwendung. In meiner Anwendung habe ich einen Dienst für OCR erstellt, der Runnable implementiert.Tesseract 3.0 mit Tess4j Absturz der Anwendung auf Linux-Server

Anwendung wird in Centos 6

unter Code ist in Service eingesetzt.

Ich beginne einen Thread des OCR-Service von Document Upload Service auf Anfrage vom Benutzer und verarbeitet die Textdaten aus PDF.

Wenn ich den Code für einzelne Anfrage testen, funktioniert es perfekt. Problem ist: Wenn ich mehr als eine Anfrage gleichzeitig senden, stürzt ganze Anwendung ab.

Unten ist der Fehler in catalina.out

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x00007f9514000078, pid=12979, tid=140277704374016 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_74-b02) (build 1.8.0_74-b02) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.74-b02 mixed mode linux-amd64 compressed oops) 
# Problematic frame: 
# C 0x00007f9514000078 
# 
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again 
# 
# An error report file with more information is saved as: 
# //hs_err_pid12979.log 
# 
# If you would like to submit a bug report, please visit: 

Wenn ich einen Debugger auf Dienst gestellt und die Anwendung ausführen, funktioniert alles einwandfrei.

+0

Können Sie versuchen, mit Bildern und sehen, ob die gleiche Art von Problem auch für Bilder auftritt? Dies scheint ein Problem im Zusammenhang mit Ghost4j zu sein, das intern von Tess4j verwendet wird. Können Sie Core Dump aktivieren und weitere Details dieses Dumps posten? Poste deine 'hs_err_pid12979.log'. Wenn dies mit Ghost4j zu tun hat, müssen Sie Ihre Verarbeitung synchronisieren, da Ghost4j Multi-Threading nicht unterstützt. –

+0

Danke @ Sangram-Jadhav. Es war tatsächlich ein Problem mit Ghost4j. für jetzt habe ich den Tesseract Code innerhalb synchronisierten Block gesetzt. Ich werde die Warteschlange später implementieren. Ich habe den obigen Code, der in Multithread-Umgebung arbeitet, auch ohne Absturz der Anwendung bearbeitet. Ich habe diesen Code in einem Thread aus verschiedenen Gründen gebraucht. –

Antwort

0

schaffen Bohne für Tesseract1

@Bean 
public Tesseract1 tesseract() { 
    return new Tesseract1(); 
} 

in Service: autowire Tesseract

@Autowire 
private Tesseract1 instance; 

setzen doOcr Methode in synchronisierten Block

syncrhonized(instance){ 
    String result = instance.doOCR(imageFile); 
    //other stuff 
} 

Jetzt Dienst Thema ohne Absturz der Anwendung ausgeführt wird.

Hinweis: Wir verlieren die gleichzeitige OCR für gleichzeitige Dokumentanforderung.

+0

Vielen Dank für die Antwort, können Sie näher erläutern, wie Sie die Bohne erstellen, die direkt Tesseract-Instanz enthält? Vielen Dank –