【发布时间】:2012-09-01 14:58:19
【问题描述】:
运行多个模型后,我需要在我的 R 脚本上运行 system() 命令来关闭我的 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,那么也许我可以将其添加到我的 script.sh 流程中。
哪种方法适合清理我的所有对象并为每个循环释放内存,这样当我需要调用 system() 命令时不会出现内存问题?
任何正确方向的提示将不胜感激! 谢谢
【问题讨论】:
-
在
rm()之后,执行gc()强制垃圾收集,看看是否有帮助。 -
你可以像这样重启R:
assign(".Last", function() system("R"), pos=.GlobalEnv); q("no") -
非常感谢!我现在正在尝试这两种选择。我想使用重启选项会解决我的问题,虽然可能不是最优雅的方式
-
显然重新启动 R 会杀死
q("no")行下方的所有内容,因此我无法完成脚本的执行。我会尝试其他选项 -
我在 EC2 上遇到了同样的问题,重新启动 R '''修复了它'''。
标签: r memory memory-management amazon-ec2