谁在OpenCPU中管理(创建,分配内存等)R会话/ R进程?

时间:2019-06-07 07:27:29

标签: r apache opencpu rapache

我们有一个OpenCPU云服务器,该服务器与Apache 2.0和rApache一起安装在RedHat服务器上,该服务器运行一些占用大量内存和处理能力的计算。我们的应用运行速度相当慢(比功能较弱的笔记本电脑要慢)-我们认为这是由于服务器上的内存分配所致。 因此,我们为服务器并行化了应用程序(使用parallel包),但是即使通常一个人可以在服务器上运行许多(超过20个)并行R作业,我们的应用程序只能运行18个左右。 / p>

为了了解发生了什么,我的问题是:当我通过OpenCPU Web界面调用R函数时,服务器的哪个组件创建/产生R进程并管理它们的内存分配?是r_mod还是Apache服务器本身,通过其他模块? Prefork MPM是否对此有影响(基于this answer)?这项工作的哪一部分由OpenCPU完成?

我阅读了OpenCPU文档,rApache文档以及有关OpenCPU的所有stackoverflow问题,但是我没有设法理解R进程的管理方式。抱歉,如果我错过了什么,如果有人可以指出我该信息的来源,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

速度缓慢可能是由于应用程序需要未预先加载的软件包而导致的,因此需要为每个请求一遍又一遍地加载它们。

为加快速度,请尝试将软件包添加到preload中的/etc/opencpu/server.conf或将预处理R代码添加到/etc/opencpu/Rprofile中,以加载所需的软件包/数据。

回答您的问题:

  • Apache2 prefork维护一个工作进程池。池n的大小可以在Apache中使用StartServersMinSpareServersMaxSpareServersMaxRequestWorkers等进行配置。因为每个R工作者都使用大量资源,所以不应将其设置得太高。
  • 启动时,每个apache2 worker进程都会启动一个新的private R进程。然后,每个R进程都加载opencpu软件包及其依赖项preload软件包,并运行/etc/opencpu/Rprofile。因此,它总共使用n倍的内存来将这些内容加载到R中。
  • 每个请求都将在临时沙箱分支中的随机工作器中执行。如果请求要求未预加载的R软件包,则必须按需加载。这会使请求变慢。
  • 请求完成后,临时沙箱叉将被杀死并清理工人。