我们有一个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进程的管理方式。抱歉,如果我错过了什么,如果有人可以指出我该信息的来源,我将不胜感激。
答案 0 :(得分:1)
速度缓慢可能是由于应用程序需要未预先加载的软件包而导致的,因此需要为每个请求一遍又一遍地加载它们。
为加快速度,请尝试将软件包添加到preload
中的/etc/opencpu/server.conf
或将预处理R代码添加到/etc/opencpu/Rprofile
中,以加载所需的软件包/数据。
回答您的问题:
n
的大小可以在Apache中使用StartServers
,MinSpareServers
,MaxSpareServers
,MaxRequestWorkers
等进行配置。因为每个R工作者都使用大量资源,所以不应将其设置得太高。preload
软件包,并运行/etc/opencpu/Rprofile
。因此,它总共使用n
倍的内存来将这些内容加载到R中。