【发布时间】:2016-06-16 15:30:19
【问题描述】:
我在我的 java 应用程序中使用 Tess4j 3.0.0 和 Tesseract 3.04。 在我的应用程序中,我为 OCR 创建了一个实现 Runnable 的服务。
应用部署在 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:
当我将调试器放在 Service 上并执行应用程序时,一切正常。
【问题讨论】:
-
您可以尝试使用图像,看看图像是否也会出现相同类型的问题?这似乎是与 Tess4j 内部使用的 Ghost4j 相关的问题。您能否启用核心转储并发布该转储的更多详细信息。发布您的
hs_err_pid12979.log。如果这与 Ghost4j 相关,那么您需要同步处理,因为 Ghost4j 不支持多线程。 -
谢谢@sangram-jadhav。 Ghost4j 确实有问题。现在我已将 Tesseract 代码放在同步块中。稍后我将实现队列。我已经编辑了上面的代码,它在多线程环境中也没有崩溃应用程序。由于一些不同的原因,我完全需要线程中的这段代码。