2010-07-26 28 views
5

Estoy usando R en algunos datos relativamente grandes y estoy solucionando algunos problemas de memoria. Esto está en Linux. Tengo significativamente menos datos que la memoria disponible en el sistema, por lo que es un problema administrar la asignación de transitorios.Problemas de límite de memoria y GC con R

cuando corro gc(), me sale el siguiente listado

  used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 2147186 114.7 3215540 171.8 2945794 157.4 
Vcells 251427223 1918.3 592488509 4520.4 592482377 4520.3 

aún R parece haber 4gb asignado en memoria residente y 2 GB de swap. Asumo que esta es la memoria asignada por el sistema operativo que asignará el sistema de administración de memoria de R y GC según sea necesario. Sin embargo, digamos que no quiero permitir que R OS-asigne más de 4 gb, para evitar la manipulación de intercambio. Siempre podría ulimit, pero luego simplemente se bloqueará en lugar de trabajar dentro del espacio reducido y GCing con más frecuencia. ¿Hay alguna manera de especificar un máximo arbitrario para el desencadenador gc y asegurarse de que R nunca asigne más? ¿O hay algo más que podría hacer para administrar el uso de la memoria?

Respuesta

3

En resumen: no. Descubrí que simplemente no se puede administrar la memoria de manera simultánea y gc().

Por otro lado, puede tratar de mantener sus datos en la memoria, pero 'afuera' de R. El bigmemory lo hace bastante fácil. Por supuesto, el uso de una versión de 64 bits de R y un amplio ram también puede hacer que el problema desaparezca.

+0

'bigmemory' mantiene las cosas en el disco, ¿no? – Shane

+0

No, puede que estés pensando en 'ff'. –

+0

Bien, bien para aclarar eso. La documentación dice que 'bigmemory'" puede usar archivos mapeados en memoria ". No estoy seguro de cuándo o cómo se relaciona. Nunca examiné las partes internas de bigmemory, pero parece que usa Boost.Interprocess. – Shane

Cuestiones relacionadas