R报告的内存使用率比htop中的“ rsession”要低

时间:2019-07-14 21:06:28

标签: r linux memory

我已经看到了几个与此相关的问题,但没有一个直接解决这个问题(herehere,尤其是here,但这是在使用AWS实例的情况下)。我有R版本3.6.1(2019-07-05)在带有16GB RAM的Ubuntu 18.04.2 LTS下运行。我有一个带有64位处理器的64位R版本。

问题:

我有一个Rnw文件,它处理一些大数据集。在Rnw文件的一半中,我已经使用pryr::mem_used()消耗了约10GB的RAM,在来自终端的htop中,我可以看到R会话消耗了约13GB的RAM,接近于RAM的物理限制。此时,我删除了R会话中的大多数无用对象,并使用pryr::mem_used()将R中的RAM降低到仅1.1GB。但是,在htop中,R仍然消耗约13GB的RAM。

例如,当删除所有相关对象时,这是R中的内存输出

> pryr::mem_used()
# 1.1 GB

> gc()
#            used  (Mb) gc trigger   (Mb)   max used    (Mb)
# Ncells   3174843 169.6    5933545  316.9    5933545   316.9
# Vcells 115029589 877.7  933231149 7120.0 1616091482 12329.8

htop的图片是:

memory_usage_htop

它显示RAM消耗最高为13GB,然后显示R会话消耗约12.5GB

制作一个reprex有点困难,因为我不能在一个小例子中重现该问题,但我对问题的处理有些深。此时(R中有2GB RAM,而htop中有13GB RAM),我运行gc()无济于事。我通过创建新对象进行了一些测试,一切都很好。但是,如果我运行 any 函数调用systemsystem2,则会收到一条错误消息,指出R无法分配更多的内存。

我很困惑,为什么htop仍然报告R占​​用了所有RAM,即使pryr::mem_used()仅报告了2GB的RAM。答案here讨论了创建第二个R会话以及它如何消耗内存的问题,但是我仍然首先无法理解为什么R报告的内存比htop低得多。

这是我的会话信息的第一部分,用于确认R版本,操作系统等。

R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.2 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C               LC_TIME=en_GB.UTF-8       
 [4] LC_COLLATE=en_GB.UTF-8     LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  stats     graphics  grDevices datasets  utils     methods   base 

0 个答案:

没有答案