OpenCPU 中的高内存使用率
High memory usage in OpenCPU
R requires CPU more than anything else so it is recommended to pick one of the newer generation compute optimized instance types, preferably with a SSD disk.
我最近 运行 遇到负载测试期间内存使用率过高(迅速上升到 100%)的问题。重现:有一个 R 包,其处理时间在无压力条件下可达 0.2。如果我试图在 3 台机器上并行查询使用 curl
的 1000 个 json 的端点之一,所有内存都会突然被使用,这会导致 'cannot fork' 或:
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)
设置是 2x AWS 8GB CPU-优化服务器 + 负载均衡器,全部在专用网络中。 HTTPS 已启用,我的主要用途是在线处理请求,因此我主要查询 /json
个端点。
您对如何处理这个问题有什么建议吗?计划是安装更多包(更多在线进程请求各种功能的结果)并且不希望最终每个盒子有 32GB RAM。
所有包都使用以下选项部署:
LazyData: false
LazyLoad: false
它们也被添加到 serverconf.yml.j2
- 预加载部分。
RData 文件通过调用 utils::data
.
在 onLoad
函数中加载
此外,请记住我使用的是没有 github 的 OpenCPU 并且只有单向通信(从后端到 ocpu 盒)你建议打开哪些选项 on/optimize?文档中还没有明确说明。
这主要取决于您使用的软件包以及您在做什么。您能否 运行 与您在本地(在命令行中)通过 opencpu 调用的相同功能而不会 运行 内存不足?
Apache2 prefork 创建工作进程来处理并发请求。这些工人中的每一个都包含一个 R 进程,所有预加载
包裹。因此,如果一个请求需要 500mb,则总内存
服务器上的消费是 n * 500,其中 n 是工作人员的数量
已加载。
根据您期望的并发请求数,您可以尝试
在您的 apache2 配置中降低 StartServers or MaxRequestWorkers。
同时尝试提高(或降低)文件 /etc/opencpu/server.conf
中的选项 rlimit.as
以限制 单个进程的内存量(地址 space)允许消费
R requires CPU more than anything else so it is recommended to pick one of the newer generation compute optimized instance types, preferably with a SSD disk.
我最近 运行 遇到负载测试期间内存使用率过高(迅速上升到 100%)的问题。重现:有一个 R 包,其处理时间在无压力条件下可达 0.2。如果我试图在 3 台机器上并行查询使用 curl
的 1000 个 json 的端点之一,所有内存都会突然被使用,这会导致 'cannot fork' 或:
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)
设置是 2x AWS 8GB CPU-优化服务器 + 负载均衡器,全部在专用网络中。 HTTPS 已启用,我的主要用途是在线处理请求,因此我主要查询 /json
个端点。
您对如何处理这个问题有什么建议吗?计划是安装更多包(更多在线进程请求各种功能的结果)并且不希望最终每个盒子有 32GB RAM。
所有包都使用以下选项部署:
LazyData: false
LazyLoad: false
它们也被添加到 serverconf.yml.j2
- 预加载部分。
RData 文件通过调用 utils::data
.
onLoad
函数中加载
此外,请记住我使用的是没有 github 的 OpenCPU 并且只有单向通信(从后端到 ocpu 盒)你建议打开哪些选项 on/optimize?文档中还没有明确说明。
这主要取决于您使用的软件包以及您在做什么。您能否 运行 与您在本地(在命令行中)通过 opencpu 调用的相同功能而不会 运行 内存不足?
Apache2 prefork 创建工作进程来处理并发请求。这些工人中的每一个都包含一个 R 进程,所有预加载 包裹。因此,如果一个请求需要 500mb,则总内存 服务器上的消费是 n * 500,其中 n 是工作人员的数量 已加载。
根据您期望的并发请求数,您可以尝试 在您的 apache2 配置中降低 StartServers or MaxRequestWorkers。
同时尝试提高(或降低)文件 /etc/opencpu/server.conf
中的选项 rlimit.as
以限制 单个进程的内存量(地址 space)允许消费