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