一段时间不活动后,OpenCPU启动缓慢

时间:2018-02-07 12:03:11

标签: r opencpu

我们有一个OpenCPU docker容器运行来处理我们在R中的模型。 它永远不需要关闭。我们已经在opencpu-server的预配置部分中设置了我们可以想到的每个依赖项。

通常模型完成时间不到2秒,这很好。 但是,在de OpenCPU容器上的一些不活动之后,对OpenCPU的第一个请求需要90多秒才能完成(查看可能是http.post限制的配置文件)。但我知道它可以在2秒内运行。 那是怎么回事?

apache日志显示没有错误; OpenCPU日志也没什​​么特别的。 我已经调整了apache以记录请求时间,并且apache确认它实际上需要90秒才能响应;消除任何与docker相关的东西。

在x周期不活动后,OpenCPU是关闭(还是Apache)?如果是这样的话为什么要花很多时间再次开始运行呢?我们怎么能禁用它呢?

关于如何解决/调试此问题的任何想法?

回答Jeroen: 问题出现在我们使用大小约为8MB而不是20KB的数据文件夹运行的第一个包中。但在R中,代码总是在0,006秒内运行。我们认为R代码不是问题的另一个原因是,在其他情况下,在正常时间内运行完全相同的输入数据的完全相同的代码。经过一段时间后,只有第一次尝试才这么慢。

另一个奇怪的事情是,即使OpenCPU运行90秒,预测结果也会回来。没有错误。当我们测量R中的运行时间(使用Sys.time())时,R代码运行大约5-6秒,而不是0,006秒。虽然这很慢,但并不能解释85秒的差异。

同样在容器内重启OpenCPU / Apache似乎暂时解决了这个问题,但在一段时间不活动后又回来了。

此外,为了回答MrSmith的问题,代码没有通过数据库运行。它只是一个用输入框架预测逻辑回归模型的脚本。

1 个答案:

答案 0 :(得分:1)

这不正常,只要Apache运行,OpenCPU就会继续运行。

要进行调试,此行为是否仅针对您的特定功能出现?或者对于任何OpenCPU请求?我怀疑问题可能实际上在你正在调用的R代码中。

请注意,90秒是OpenCPU中POST请求的默认超时。可能你的代码中的某些东西实际上被卡住了,而opencpu在90年代后就会被杀掉。对于那些有问题的请求,您会得到什么HTTP响应?您的R代码是否使用某种可能超时的磁盘或网络连接?