虽然记忆似乎可用R可以不分配内存(R Cannot allocate memory though m

2019-06-28 00:25发布

运行多个模型之后,我需要运行一个system()在我的[R脚本命令来关闭我的EC2实例,但是当我到这一点,我得到:

cannot popen 'ls', probable reason 'Cannot allocate memory'

注:对于这个问题,我甚至尝试ls没有工作

我的脚本的流程如下

  • 负载模型(大约2GB)
  • 煤矿文件和写MySQL数据库

上述步骤重复与不同的模型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 A的方式,那么也许我可以添加到我的script.sh流。

这将是清洗我的所有对象,并让内存免费为每个环路的适当的方式,所以当我需要调用system()命令没有记忆问题?

在正确的方向任何提示将不胜感激! 谢谢

Answer 1:

我只是张贴这一点,因为它是太长,不适合在评论。 既然你没有包括的任何代码,这是相当困难的给予建议。 但是,这里是一些代码,也许你可以考虑一下。

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将被加载在重新启动时)



文章来源: R Cannot allocate memory though memory seems to be available