【发布时间】: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 ..).. 那么,您的代码是做什么的?