运行多个模型后,我需要在我的R脚本上运行system()
命令来关闭我的EC2实例,但当我到达那一点时,我得到:
cannot popen 'ls', probable reason 'Cannot allocate memory'
注意:对于这个问题,我甚至尝试了ls
无效
我的脚本流程如下
上述步骤使用不同型号重复约20次,每次平均尺寸为2GB
此时我需要调用system("sudo shutdown -h now")
并且没有任何反应,但是当我尝试system("sudo shutdown -h now",intern=TRUE)
时,我收到了分配错误。
我在调用关闭之前尝试了rm()
所有对象,但同样的错误仍然存在。
以下是我系统上的一些数据,它是大型EC2 Ubuntu实例
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] splines stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] RTextTools_1.3.9 tau_0.0-15 glmnet_1.8 Matrix_1.0-6
[5] lattice_0.20-10 maxent_1.3.2 Rcpp_0.9.13 caTools_1.13
[9] bitops_1.0-4.1 ipred_0.8-13 prodlim_1.3.2 KernSmooth_2.23-8
[13] survival_2.36-14 mlbench_2.1-1 MASS_7.3-21 rpart_3.1-54
[17] e1071_1.6-1 class_7.3-4 tm_0.5-7.3 nnet_7.3-4
[21] tree_1.0-31 randomForest_4.6-6 SparseM_0.96 RMySQL_0.9-3
[25] ggplot2_0.9.1 DBI_0.2-5
loaded via a namespace (and not attached):
[1] colorspace_1.1-2 dichromat_1.2-4 digest_0.5.2 grid_2.15.1
[5] labeling_0.2 memoise_0.1 munsell_0.3 plyr_1.7.1
[9] proto_0.3-9.2 RColorBrewer_1.0-5 reshape2_1.2.1 scales_0.2.1
[13] slam_0.1-25 stringr_0.6.1
gc()返回
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1143171 61.1 5234604 279.6 5268036 281.4
Vcells 1055057 8.1 465891772 3554.5 767962930 5859.1
我注意到如果我只运行1个模型而不是20个它可以正常工作,那么可能是每次运行后内存都没有获得自由,尽管我做了rm()
使用过的对象
我还注意到,如果我关闭R并重新启动它然后调用system()
它就可以了。如果有办法在R中重新启动R,那么我可以将其添加到我的script.sh
流程中。
这是清理所有对象并让内存为每个循环释放的适当方法,所以当我需要调用system()
命令时,没有内存问题?
任何正确方向的提示都将非常感谢! 感谢
答案 0 :(得分:5)
我只是张贴这个,因为它太长,不适合评论。由于您没有包含任何代码,因此很难提供建议。但是,这里有一些你可以考虑的代码。
wd <- getwd()
assign('.First', function(x) {
require('plyr') #and whatever other packages you're using
file.remove(".RData") #already been loaded
rm(".Last", pos=.GlobalEnv) #otherwise won't be able to quit R without it restarting
setwd(wd)
}, pos=.GlobalEnv)
assign(".Last", function() {
system("R --no-site-file --no-init-file --quiet")
}, pos=.GlobalEnv)
save.image() #or only save the things you want to be reloaded.
q("no")
我们的想法是将您需要的内容保存在名为.RData
的文件中。您创建了一个.Last
函数,该函数将在您退出R时运行。.Last
函数将启动R的新会话。并创建一个.First
函数,该函数将立即运行R重新启动。 .First
函数将加载您需要的包并进行清理。
现在,您可以退出R并重新加载所需的内容。
(q("no")
表示不保存,但您已经保存了.RData
中所需的所有内容(重新启动时将加载)