OpenCPU中的高内存使用率

时间:2017-11-21 17:42:07

标签: r opencpu

  

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

我最近在负载测试期间遇到了高内存使用率(快速上升到100%)的问题。重现:有一个R包,在无应力条件下处理时间最多为0.2。如果我试图在3台机器上同时使用curl查询其中一个端点的1000个jsons,则会突然使用所有内存,这导致“无法分叉”。或者:

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 - 预加载部分。 通过调用onLoad将RData文件加载到utils::data函数中。

另外,请记住,我没有github使用OpenCPU,只有单向通信(从后端到ocpu盒)你建议打开/优化哪些选项?它尚未在文档中明确说明。

1 个答案:

答案 0 :(得分:2)

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

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

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

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