【问题标题】:OpenCPU slow startup after period of inactivityOpenCPU 在一段时间不活动后启动缓慢
【发布时间】:2018-02-07 12:03:10
【问题描述】:

我们有一个 OpenCPU docker 容器正在运行以在 R 中处理我们的模型。 它永远不需要关闭。我们已经将我们能想到的所有依赖项都放在了 opencpu-server 配置的 preload 部分。

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

apache 日志没有显示错误; OpenCPU 的日志也没有什么异常。 我还调整了 apache 以记录请求时间,并且 apache 确认它实际上花了 90 秒来响应;消除任何与 docker 相关的东西。

在 x 段不活动后 OpenCPU 是否正在关闭(或 Apache 是否关闭)?如果是这样,为什么要花这么多时间才能再次运行,或者我们如何禁用它?

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

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

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

在容器本身内重新启动 OpenCPU/Apache 似乎可以暂时解决问题,但会在一段时间不活动后恢复。

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

【问题讨论】:

  • 在没有更多细节的情况下回答这个问题并不容易。例如,您的 R 代码是否访问数据库? (在这种情况下,您观察到的延迟可能与数据库的会话有关,与您访问它的方式无关(jndi、jdbc、odbc ..).. 那么,您的代码是做什么的?

标签: r opencpu


【解决方案1】:

这不正常,只要 Apache 运行,OpenCPU 就会一直运行。

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

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

【讨论】:

  • 编辑以上内容以回答部分问题
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2021-06-02
相关资源
最近更新 更多