[R] Memory Problems in R

Roger D. Peng rpeng at jhsph.edu
Wed Aug 18 20:10:43 CEST 2004


There is a limit on how long a single vector can be, and I think it's 
2GB (even on 64-bit platforms).  Not sure on how the gc trigger is set....

-roger

Scott Gilpin wrote:
> Hello everyone -
> 
> I have a couple of questions about memory management of large objects.
> Thanks in advance for your response.
> 
> I'm running R version 1.9.1 on solaris 8, compiled as a 32 bit app. 
> My system has 12.0 GB of memory, with usually ~ 11GB free.  I checked
> system limits using ulimit, and there is nothing set that would limit
> the maximum amount of memory for a process (with the exception of an
> 8MB stack size).  I've also checked the amount of memory available to
> R using mem.limits(), and there is no limit set.
> 
> I'm running into two problems.  The first is the error  "cannot
> allocate vector of size XXXXX" - I know this has been discussed
> several times on this mailing list, but it usually seems the user does
> not have enough memory on their system, or does not have the memory
> limits set correctly.  I don't believe this is the case in this
> situation.  I verified that I don't have any objects in memory when R
> starts up, and that memory limits are set to NA.  Here is some output:
> 
> 
>>ls()
> 
> character(0)
> 
>>mem.limits()
> 
> nsize vsize 
>    NA    NA 
> 
>>gc()
> 
>          used (Mb) gc trigger (Mb)
> Ncells 432197 11.6     531268 14.2
> Vcells 116586  0.9     786432  6.0
> 
>>v<-rep(0,268435431)
> 
> Error: cannot allocate vector of size 2097151 Kb
> 
>>v<-rep(0,268435430)
>>object.size(v)
> 
> [1] 2147483468
> 
>>gc()
> 
>             used   (Mb) gc trigger   (Mb)
> Ncells    432214   11.6     741108   19.8
> Vcells 268552029 2048.9  268939773 2051.9
> 
> 
> Does R have a limit set on the size of an object that it will
> allocate?  I know that the entire application will only be able to use
> 4GB of memory (because it's only 32bit), but I haven't found anything
> in the R documentation or the help lists that indicates there is
> maximum on the size of an object.  I understand there will be problems
> if an object is greater than 2GB and needs to be copied - but will R
> limit the creation of such an object?  It's also my understanding that
> the garbage collector won't move objects and this may cause memory to
> become fragmented - but I'm seeing these issues on startup when there
> are no objects in memory.
> 
> 
> My second problem is with matrices and the garbage collector, and the
> limits it sets for gc trigger after a matrix is created.  When I
> create a vector of approximately 500MB, R sets the gc trigger to be
> slightly above this amount.  The gc trigger also seems to correspond
> to the process size (as output by top).  When I create a matrix of
> approximately 500MB, R sets the gc trigger to be roughly 3 times the
> size of the matrix (and the process size is ~ 1.5GB).  Therefor, when
> I try to create larger matrices, where 3x the size of the matrix is
> greater than 4GB, R gives me an error.  Is there anything I can do to
> create large matrices?  Or do I have to manipulate large objects as a
> vector?
> 
> Output from the 3 different scenarios is below:
> 
> 1) - can't create a matrix, but can create a vector
> 
> [Previously saved workspace restored]
> 
> 
>>m<-matrix(rep(0,25000*10000),nrow=10000)
> 
> Error: cannot allocate vector of size 1953125 Kb
> 
>>v<-rep(0,25000*10000)
>>object.size(v)/1024
> 
> [1] 1953125
> 
> 
> 2) gc trigger is set slightly higher than the size of the vector
> 
> 
>>ls()
> 
> character(0)
> 
>>mem.limits()
> 
> nsize vsize 
>    NA    NA 
> 
>>gc()
> 
>          used (Mb) gc trigger (Mb)
> Ncells 432197 11.6     531268 14.2
> Vcells 116586  0.9     786432  6.0
> 
>>v<-rep(0,(2510)*(25000))
>>object.size(v)
> 
> [1] 5.02e+08
> 
>>gc()
> 
>            used  (Mb) gc trigger  (Mb)
> Ncells   432210  11.6     667722  17.9
> Vcells 62866589 479.7   63247172 482.6
> 
> 
> 3) gc trigger is set ~ 3x the size of the matrix
> 
> 
>>ls()
> 
> character(0)
> 
>>mem.limits()
> 
> nsize vsize 
>    NA    NA 
> 
>>gc()
> 
>          used (Mb) gc trigger (Mb)
> Ncells 432197 11.6     531268 14.2
> Vcells 116586  0.9     786432  6.0
> 
>>A<-matrix(rep(0,(2510)*(25000)),nrow=(2510),ncol=(25000))
>>object.size(A)
> 
> [1] 502000120
> 
>>gc()
> 
>            used  (Mb) gc trigger   (Mb)
> Ncells   432213  11.6     741108   19.8
> Vcells 62866590 479.7  188640940 1439.3
> 
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>




More information about the R-help mailing list