【问题标题】:High memory usage in OpenCPUOpenCPU 中的高内存使用率
【发布时间】:2017-11-21 17:42:06
【问题描述】:

R 比其他任何东西都更需要 CPU,因此建议选择新一代计算优化实例类型之一,最好使用 SSD 磁盘。

我最近在负载测试期间遇到了内存使用率高(迅速提高到 100%)的问题。重现:有一个 R 包,其处理时间在无应力条件下高达 0.2。如果我尝试使用 curl 在 3 台机器上并行查询 1000 个 json 的端点之一,所有内存都会突然被使用,这会导致“无法分叉”或:

cannot popen '/usr/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory' In call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE)

设置是 2 台 AWS 8GB CPU 优化服务器 + 负载均衡器,全部位于专用网络中。 HTTPS 已启用,我的主要用途是在线处理请求,所以我主要查询/json 端点。

您对如何解决这个问题有什么建议吗?计划是安装更多的包(更多的在线进程请求各种功能的结果),并且不希望最终每个盒子有 32GB 的 RAM。

所有的包都部署了这样的选项:

LazyData: false
LazyLoad: false

它们也被添加到serverconf.yml.j2 - 预加载部分。 RData 文件通过调用utils::dataonLoad 函数中加载。

另外,请记住,我使用的是没有 github 的 OpenCPU,并且只有单向通信(从后端到 ocpu 框),您建议打开/优化哪些选项?文档中还没有明确说明。

【问题讨论】:

    标签: r opencpu


    【解决方案1】:

    这主要取决于您使用的软件包以及您在做什么。您可以在本地(在命令行中)运行通过 opencpu 调用的相同功能而不会耗尽内存吗?

    Apache2 prefork 创建工作进程来处理并发请求。这些工作人员中的每一个都包含一个 R 进程,其中所有预加载 包。因此,如果一个请求需要 500mb,那么总内存 服务器上的消耗是 n * 500 其中 n 是工作人员的数量 已加载。

    根据您期望的并发请求数,您可以尝试 在 apache2 配置中降低 StartServersMaxRequestWorkers

    还可以尝试提高(或降低)文件/etc/opencpu/server.conf 中的选项rlimit.as,它限制了单个进程 允许使用的内存量(地址空间)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 2018-07-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多