谁在OpenCPU中管理(创建、分配内存等)R会话/R进程?
我们有一个OpenCPU云服务器,安装在带有Apache2.0和rApache的RedHat服务器上,它运行一些相当内存和处理密集的计算。我们的应用程序运行得相当慢(比功能较弱的笔记本电脑慢)——我们认为这是因为服务器上的内存分配。 出于这个原因,我们为服务器并行化了应用程序(使用谁在OpenCPU中管理(创建、分配内存等)R会话/R进程?,r,apache,opencpu,rapache,R,Apache,Opencpu,Rapache,我们有一个OpenCPU云服务器,安装在带有Apache2.0和rApache的RedHat服务器上,它运行一些相当内存和处理密集的计算。我们的应用程序运行得相当慢(比功能较弱的笔记本电脑慢)——我们认为这是因为服务器上的内存分配。 出于这个原因,我们为服务器并行化了应用程序(使用parallel包),但即使通常一个人可以在服务器上运行多个(超过20个)并行R作业,我们的应用程序也只能运行18个左右 为了理解发生了什么,我的问题是:当我通过OpenCPU web界面调用R函数时,服务器的哪个组件
parallel
包),但即使通常一个人可以在服务器上运行多个(超过20个)并行R作业,我们的应用程序也只能运行18个左右
为了理解发生了什么,我的问题是:当我通过OpenCPU web界面调用R函数时,服务器的哪个组件创建/生成R进程并管理它们的内存分配?它是r\u mod
还是Apache服务器本身,通过一些其他模块?Prefork
MPM是否对此有影响(基于)?这项工作的哪一部分是由OpenCPU完成的
我阅读了OpenCPU文档,rApache文档,所有关于OpenCPU的stackoverflow问题,但是我没有理解R进程是如何管理的。抱歉,如果我遗漏了什么,如果有人能告诉我这些信息的来源,我将非常感激。缓慢可能是由于应用程序需要未预加载的包,因此它们需要为每个请求反复加载 要加快速度,请尝试将包添加到
/etc/opencpu/server.conf
中的预加载
,或将预处理R代码添加到加载所需包/数据的/etc/opencpu/Rprofile
回答你的问题:
- Apache2 prefork维护一个工作进程池。池的大小可在Apache中使用
、StartServers
、MinSpareServers
、MaxSpareServers
等进行配置。因为每个R工作者使用大量资源,所以不应将其设置得太高MaxRequestWorkers
- 启动时,每个apache2工作进程启动一个新的私有R进程。然后,每个R进程加载opencpu包及其依赖项,
包,并运行预加载
。因此,它总共使用了/etc/opencpu/Rprofile
乘以在R中加载这些东西所需的内存量n
- 每个请求都在临时沙箱分支中的随机工作进程中执行。如果请求需要未预加载的R包,则必须按需加载这些包。这使得请求速度变慢
- 请求完成后,临时沙箱叉被杀死,工人被清理