【发布时间】:2015-09-01 20:06:29
【问题描述】:
我的要求是通过 Java Webservice 执行 R 脚本。 webservice需要50并发。
我们正在使用 RServe 从 Java 代码中执行 R 脚本。为此,在 linux 服务器中,我们创建了 50 个 RServe 实例,从不同的端口启动。在 java 应用程序内部,创建了一个包含 50 个 RConnection 对象的连接池,每个对象都链接到一个 RServe 实例 created 。对于每次执行,我们从池中获取一个 RConnection,执行 R 脚本,获取响应值,然后将 RConnection 返回到池中。
当我们执行单用户访问的 web 服务时,R 执行在 1 秒内完成。但是,如果我尝试以 50 的并发性运行相同的 Web 服务,则在 RServe 中执行 R 脚本大约需要 30 秒。 由于如果使用单个用户执行实际的 R 执行只需要 1 秒,我认为我对 RServe 做错了什么。任何指针都会有所帮助。
【问题讨论】:
-
RServe 不是根据需要分叉吗?只需启动一个并通过最多 50 个请求来实现它...
-
我理解的方式是,RServe 将一次接受一个传入请求。这不正确吗?即使我有 50 个实例,为什么进程变慢也是我试图理解的原因
-
仅在 Windows 上,希望您不要将其用作后端。
-
不,这不在 Windows 上。这是否意味着我可以创建许多指向一个 RServe 实例的 RConnection 实例。不过,为什么这会解决我的问题?只是好奇,当我通过 RServe 执行 R 时,它是否会创建可能使其变慢的新进程?
-
RServe 一次可以处理多个连接。事实上,它被设计用来处理并发性。我已经使用它几个星期了,我只使用一个 RServe 实例来处理所有连接没有任何问题。您是否尝试过只使用一个 RServe?也许操作系统过载了,因为每个进程都需要自己的内存空间和资源。我使用一个 RServe 进行瘦身,这是一种更好的方法,并让它使用 unix 线程处理每个连接