首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP调用Java进程的性能优化

PHP调用Java进程的性能优化
EN

Stack Overflow用户
提问于 2014-04-08 14:59:42
回答 1查看 72关注 0票数 0

我有一个PHP表单,它接受文件上传(图像和文本),从中提取文本(OCR和.pdf、.doc等)。文本提取是通过使用exec来调用jar文件/命令行进程来执行的(我不控制源),后者返回文本。虽然测试没有问题,但是,与5同时PDF上传(每个大约5MB)服务器负载最大。整个过程(每次上传)需要10-15秒,加载后立即下降到正常状态。

我假设问题在于Java并为每个exec调用分配给JRE;当从命令行手动调用jar文件时,大约需要10秒,因此几乎与单个上传响应相同。不可能将提取作为后台进程运行,因为HTTP响应包含从上传的文件文本中处理的“数据”。我考虑过分叉处理进程,但这无助于服务器负载(可能会使情况变得更糟)。我希望避免完全用Java重写服务。

有没有一种方法可以将Java进程JRE或管道连续文件预加载到相同的文件,或者类似的东西?

EN

回答 1

Stack Overflow用户

发布于 2014-04-08 15:24:36

如果我是您,我将首先寻找一些关于在PHP中转换文件的开源项目。当使用一种语言时,添加另一种语言通常会导致不必要的工作。很有可能,您需要的任何东西都有一个库;它甚至可能比当前的解决方案更快。

考虑到您必须使用Java:

文件操作通常占用cpu,而且只会随着较大的文件而变得更糟。除了可能限制文件大小之外,处理一个文件所需的时间很可能没有什么可做的。

然而,,您可以控制服务器是什么/不正在做什么。您应该考虑将工作分散在服务器之间。您用来转换文件的服务器应该有一个更大的处理器,不应该需要大量的RAM;而您的web服务器在RAM上有一个更小的处理器。

对于每个转换的数据,将其存储在数据库中,直到转换完成为止。转换完成后,让您的转换服务器连接到数据库并存储相关数据,以及一个“完成”标志。

从这里开始,您可以告诉客户机/浏览器反复检查数据库中的done标志(AJAX或Page )。

干杯!

-Nick

*编辑*

此外,您的转换服务器不应该需要停止。将其作为一个非超时应用程序运行,不断检查数据库中的新作业是理想的;尽管它还建议您将其配置为在缓慢期间关闭或hibernate。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22940814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档