java - 无法从cgi运行java命令

标签 java python cgi apache-tika

我有这个函数可以在Linux上使用tika读取doc文件:

def read_doc(doc_path):
    output_path=doc_path+'.txt'
    java_path='/home/jdk1.7.0_17/jre/bin/'
    environ = os.environ.copy()
    environ['JAVA_HOME'] =java_path
    environ['PATH'] =java_path
    tika_path=java_path+'tika-app-1.3.jar'
    shell_command='java -jar %s --text --encoding=utf-8 "%s" >"%s"'%(tika_path,doc_path,output_path)
    proc=subprocess.Popen(shell_command,shell=True, env=environ,cwd=java_path)
    proc.wait()

当我从命令行运行该函数时,它工作正常,但是当我使用 CGI 调用相同的函数时,出现以下错误:

Error occurred during initialization of VM Could not reserve enough space for object heap

我检查了之前针对此特定错误的答案,他们建议增加内存,但这似乎不起作用...我认为这与内存分配无关,而是与一些读/写/执行有关来自cgi脚本的特权,知道如何解决这个问题吗?

最佳答案

您正在每个单独的 CGI 调用的内存和进程空间中加载整个 JVM 实例。那很糟。很坏。对于性能和内存使用而言。增加内存分配只是一种技巧,并不能解决真正的问题。核心 java 代码几乎不应该通过 CGI 调用。

你的情况会更好:

  • 通过在 Web 服务器中运行 java Servlet,使用所需的参数直接调用适当的 Tika 类,从而避免使用 CGI 和 Python。将用户 url 直接映射到 servlet(通过 Servlet 类上的 @WebServlet("someURL") 注释)。
  • Running Tika in server mode并通过 Python 中的 REST 调用它。
  • 作为服务器/守护进程单独运行核心 Java 应用程序,让它监听 TCP ServerSocket。通过客户端套接字从 Python 调用。

关于java - 无法从cgi运行java命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16251436/

相关文章:

java - 空指针异常 jnlp.FileSaveService

java - 使用 onPostExecute 设置全局数组值时出现问题

python - 如何实时更新 django 模板?

html - Perl CGI 向 mySQL 数据库发送空值?

python - 使用python的CGI表单提交按钮

java - Java Web 服务的类路径、classNotFoundException

java - ObservableList 中的结果集

python - 机器字典理解和现有字典的深度复制哪个更容易?

python - PyQt 中透明 QSplashScreen 图像上的白色边框

python - Apache httpd 不加载 .bashrc