打开时,Rstudio 启动许多进程(在上一个会话中以并行包启动)——如何杀死它们?
On open, Rstudio starts many processes (started with parallel package in previous session) -- how to kill them?
我已经通读了这个 SO 问题和答案 (R parallel computing and zombie processes),但它似乎并没有完全解决我的情况。
我有一个 4 核 MacBook Pro 运行ning Mac OS X 10.10.3、R 3.2.0 和 RStudio 0.99.441。
昨天,我正在试用包 "foreach" 和 "doParallel"(我想在我正在处理的包中使用它们)。我这样做了:
cl <- makeCluster(14)
registerDoParallel(cl)
a <- 0
ls <- foreach(icount(100)) %dopar% {
b <- a + 1
}
我很清楚,在我的 4 核机器上有 14 个进程是没有意义的,但该软件实际上将 运行 在 16 核机器上。在这一点上,我的电脑停了下来。我打开 activity 监视器并发现 16 个(或者更多,也许?)R 进程。我试图从 activity 监视器中强行退出它们——没有成功。我关闭了 RStudio,这杀死了所有 R 进程。我重新打开 RStudio 并重新启动了所有 R 进程。我重新启动了计算机并重新启动了 RStudio,然后重新启动了所有 R 进程。
如何在不重新启动所有这些进程的情况下启动 RStudio?
编辑:我忘了提到我还重建了我当时正在处理的包(所有进程可能在构建期间 运行ning)
EDIT2:另外,我不能 StopCluster(cl) 因为 cl 不再存在于环境中...我关闭了那个 R 会话。
EDIT3:当我打开R.app(R自带的R GUI)或者在终端打开R时,没有出现这样的问题。所以我觉得一定是RStudio相关的。
EDIT4:在打开 RStudio 和启动所有这些不需要的进程之间似乎存在 运行dom 延迟。 15 秒到 2 分钟之间。
EDIT5:似乎进程只在我打开它们启动的项目后才开始。
EDIT6:我一直在挑选 .Rproj.user 文件寻找要删除的东西。我删除了 ctx、pcs 和 sdb 中的所有文件(但不包括目录)。问题仍然存在。
EDIT7:当我在命令行 运行 "killall R" 时,它会终止所有这些进程,但是当我重新启动 RStudio 并重新打开项目时,所有进程都会重新启动。
EDIT8:我使用 "killall -s R | wc -l" 发现项目打开时 R 进程的数量不断增加。它上升到 358 然后我 运行 "killall R" 因为我的电脑发出可怕的声音。
EDIT9:RStudio 目前完全无法使用。每次我"killall R",它都会在15秒内重新启动所有进程。
EDIT10:当我启动一个同时启动大量 R 进程的构建时——最后检查 109 个。当构建显示 "preparing package for lazy loading" 时,这些进程都会启动。此时计算机几乎停止运行。
EDIT11:我删除了 .Rproj 文件(实际上只是将其作为备份移动)和 .Rproj.user 目录。我在 RStudio 中使用了 "create project from directory"。当我打开那个新项目时,我仍然得到相同的行为。当我打开一个不包含在 .Rproj 文件或 .Rproj.user 目录中的项目时,RStudio 在做什么!?我在这个问题上花了一整天....:(
最佳猜测 -- 最新版本的 RStudio 尝试在幕后做一些工作来开发自动完成数据库,基于它在项目中打开的文件中检测到的 library()
和 require()
调用.为此,它启动新的 R 进程,加载这些包(使用 library()
),然后 returns 该包提供的所有对象的集合。
是否有机会加载某些具有复杂 .onLoad()
操作的包? RStudio 中的这个引擎可能是 运行 那些在幕后的 R 进程中的引擎,但由于某种原因被卡住并留给你这些(可能陈旧或繁忙的)R 进程。
作为参考,报告了一些类似的问题 here。
以下是最终修复它的方法:
删除我构建的包(我相信是二进制文件...我在 RStudio 的 "Packages" 部分单击了它名称右侧的 "x"。
用
重建它
library(parallel)
注释掉了。
unloadNamespace("doParallel")
将杀死 registerDoParallel
启动的无名工人
如果你有集群的名称,你可以使用:
stopCluster(cl)
我已经通读了这个 SO 问题和答案 (R parallel computing and zombie processes),但它似乎并没有完全解决我的情况。
我有一个 4 核 MacBook Pro 运行ning Mac OS X 10.10.3、R 3.2.0 和 RStudio 0.99.441。
昨天,我正在试用包 "foreach" 和 "doParallel"(我想在我正在处理的包中使用它们)。我这样做了:
cl <- makeCluster(14)
registerDoParallel(cl)
a <- 0
ls <- foreach(icount(100)) %dopar% {
b <- a + 1
}
我很清楚,在我的 4 核机器上有 14 个进程是没有意义的,但该软件实际上将 运行 在 16 核机器上。在这一点上,我的电脑停了下来。我打开 activity 监视器并发现 16 个(或者更多,也许?)R 进程。我试图从 activity 监视器中强行退出它们——没有成功。我关闭了 RStudio,这杀死了所有 R 进程。我重新打开 RStudio 并重新启动了所有 R 进程。我重新启动了计算机并重新启动了 RStudio,然后重新启动了所有 R 进程。
如何在不重新启动所有这些进程的情况下启动 RStudio?
编辑:我忘了提到我还重建了我当时正在处理的包(所有进程可能在构建期间 运行ning)
EDIT2:另外,我不能 StopCluster(cl) 因为 cl 不再存在于环境中...我关闭了那个 R 会话。
EDIT3:当我打开R.app(R自带的R GUI)或者在终端打开R时,没有出现这样的问题。所以我觉得一定是RStudio相关的。
EDIT4:在打开 RStudio 和启动所有这些不需要的进程之间似乎存在 运行dom 延迟。 15 秒到 2 分钟之间。
EDIT5:似乎进程只在我打开它们启动的项目后才开始。
EDIT6:我一直在挑选 .Rproj.user 文件寻找要删除的东西。我删除了 ctx、pcs 和 sdb 中的所有文件(但不包括目录)。问题仍然存在。
EDIT7:当我在命令行 运行 "killall R" 时,它会终止所有这些进程,但是当我重新启动 RStudio 并重新打开项目时,所有进程都会重新启动。
EDIT8:我使用 "killall -s R | wc -l" 发现项目打开时 R 进程的数量不断增加。它上升到 358 然后我 运行 "killall R" 因为我的电脑发出可怕的声音。
EDIT9:RStudio 目前完全无法使用。每次我"killall R",它都会在15秒内重新启动所有进程。
EDIT10:当我启动一个同时启动大量 R 进程的构建时——最后检查 109 个。当构建显示 "preparing package for lazy loading" 时,这些进程都会启动。此时计算机几乎停止运行。
EDIT11:我删除了 .Rproj 文件(实际上只是将其作为备份移动)和 .Rproj.user 目录。我在 RStudio 中使用了 "create project from directory"。当我打开那个新项目时,我仍然得到相同的行为。当我打开一个不包含在 .Rproj 文件或 .Rproj.user 目录中的项目时,RStudio 在做什么!?我在这个问题上花了一整天....:(
最佳猜测 -- 最新版本的 RStudio 尝试在幕后做一些工作来开发自动完成数据库,基于它在项目中打开的文件中检测到的 library()
和 require()
调用.为此,它启动新的 R 进程,加载这些包(使用 library()
),然后 returns 该包提供的所有对象的集合。
是否有机会加载某些具有复杂 .onLoad()
操作的包? RStudio 中的这个引擎可能是 运行 那些在幕后的 R 进程中的引擎,但由于某种原因被卡住并留给你这些(可能陈旧或繁忙的)R 进程。
作为参考,报告了一些类似的问题 here。
以下是最终修复它的方法:
删除我构建的包(我相信是二进制文件...我在 RStudio 的 "Packages" 部分单击了它名称右侧的 "x"。
用
重建它library(parallel)
注释掉了。
unloadNamespace("doParallel")
将杀死 registerDoParallel
如果你有集群的名称,你可以使用:
stopCluster(cl)