私の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();
}
ため
イメージを試してみて、同じタイプの問題がイメージにも発生するかどうかを確認できますか?これは内部的にTess4jによって使用されるGhost4jに関連する問題であるようです。コアダンプを有効にして、そのダンプの詳細を投稿できますか? 'hs_err_pid12979.log'を投稿してください。これがGhost4jに関連している場合、Ghost4jはマルチスレッドをサポートしていないため、処理を同期させる必要があります。 –
ありがとう@ sangram-jadhav。 Ghost4jには本当に問題がありました。今のところ 私はTesseractコードを同期ブロックの中に入れました。私は後でキューを実装します。上記のコードを編集して、アプリケーションをクラッシュさせずにマルチスレッド環境で作業しています。私はいくつかの異なる理由のためにこのコードをスレッドで必要としていました。 –