2016-06-15 3 views
0

私のJavaアプリケーションでTess4j 3.0.0とTesseract 3.04を使用しています。 私のアプリケーションでは、Runnableを実装するOCR用のサービスを作成しました。Tess4actのTesseract 3.0がLinuxサーバでアプリケーションをクラッシュする

アプリケーションはCentOS 6にデプロイされます。

以下のコードはサービス中です。

Tesseract1 instance = new Tesseract1(); 
result = instance.doOCR("pathtodocument/abc.pdf"); 

私は、ユーザーからのリクエストに応じてドキュメントのアップロードサービスからOCRサービスのスレッドを起動し、PDFからテキストデータを処理します。

私は単一の要求のコードをテストすると完璧に動作します。 問題: 一度に複数のリクエストを送信すると、アプリケーション全体がクラッシュします。

以下は、私がサービスのデバッガを入れて、アプリケーションを実行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: 

に誤りである、すべてが正常に動作します。サービスでTesseract1

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

ため

+0

イメージを試してみて、同じタイプの問題がイメージにも発生するかどうかを確認できますか?これは内部的にTess4jによって使用されるGhost4jに関連する問題であるようです。コアダンプを有効にして、そのダンプの詳細を投稿できますか? 'hs_err_pid12979.log'を投稿してください。これがGhost4jに関連している場合、Ghost4jはマルチスレッドをサポートしていないため、処理を同期させる必要があります。 –

+0

ありがとう@ sangram-jadhav。 Ghost4jには本当に問題がありました。今のところ 私はTesseractコードを同期ブロックの中に入れました。私は後でキューを実装します。上記のコードを編集して、アプリケーションをクラッシュさせずにマルチスレッド環境で作業しています。私はいくつかの異なる理由のためにこのコードをスレッドで必要としていました。 –

答えて

0

作成豆:

@Autowire 
private Tesseract1 instance; 

autowireたTesseractは

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

サービススレッドは、アプリケーションをクラッシュすることなく実行される同期ブロック内doOcr方法を置きます。

注:同時ドキュメント要求に対して、同時OCRが失われています。

+0

答えをありがとう、あなたはそれの中に直接Tesseractインスタンスを持つことになるBeanを作成する方法を詳しく説明できますか?ありがとう –

関連する問題