git gc sin memoria

6

Tengo que limpiar mi repositorio git con git gc. Desafortunadamente tengo un error fatal de memoria.

ernst@samson:~/htdocs/stockdoo$ git gc
Counting objects: 42368, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (24700/24700), done.
fatal: Out of memory, malloc failed   
error: failed to run repack

Esto es con git 1.7.4 en Ubuntu 10.4.

¿Alguna idea para solucionar este problema?

BetaRide
fuente
¿Qué versión de Git está utilizando y en qué sistema operativo la está utilizando?
VonC

Respuestas:

2

En un sistema operativo de 64 bits, git requiere una gran cantidad de virtual memoria para ejecutar git-gc, unos 8GB. Normalmente, nadie limita la memoria virtual en un sistema operativo de 64 bits porque ese tipo de derrota en todo el sentido de tener un sistema operativo de 64 bits, pero algunos administradores o usuarios "sin educación" lo hacen. Si tiene un límite de recursos en la memoria virtual de menos de 64 GB, encuentre a la persona que lo configuró y péguela con un bate de pista.

Uno de los principales beneficios de los sistemas operativos de 64 bits es que significa que el espacio de direcciones no es un recurso escaso.

Creo que las nuevas versiones de git Tengo una solución para esto, pero el problema realmente no está en git en absoluto.

David Schwartz
fuente
En cualquier sistema multiusuario, es absolutamente necesario limitar el uso de la memoria virtual si usted es responsable de administrador del sistema. De lo contrario, cualquier programa malicioso o escrito por error puede iniciar fácilmente el OOM killer, lo que podría ser lo peor que puede pasar.
Cougar
@Cougar: las páginas limpias de la memoria virtual nunca pueden desencadenar al asesino de OOM. Puede limitar las páginas de respaldo si lo desea.
David Schwartz
Desearía poder bajar esta respuesta (no tengo suficiente reputación). El problema está definitivamente en git. ¿Por qué la rutina de limpieza requiere 8 GB? de la memoria? No es razonable. ¿Y por qué crees que el problema con la memoria virtual? El problema es que git no puede obtener suficiente memoria libre.
anton_rh
@anton_rh Cuando dice que usar 8 GB de memoria no es razonable, está hablando de memoria física, es decir, RAM. El problema no es que git no pueda obtener suficiente memoria libre, es que git no puede obtener suficiente memoria virtual. Por favor, lea mi respuesta de nuevo, particularmente la primera oración. En los sistemas operativos modernos, la memoria virtual no es un recurso escaso y, por lo tanto, los desarrolladores rara vez hacen un esfuerzo para minimizarla. Una aplicación de 64 bits, por ejemplo, podría decidir asignar en memoria 8GB de archivos. Por qué no? Usará 8 GB de memoria virtual y si alguien pone un límite de vm en la aplicación, se quedará sin "memoria".
David Schwartz
@DavidSchwartz, no puse ninguna limitación de VM en el sistema (en realidad, nunca he oído hablar de tales limitaciones). Al 99%, todo el sistema comienza a funcionar muy lentamente (creo que porque está usando swap activamente). Así que supongo que el problema es con la memoria física, no con virtual. Si git No necesitaba tanta memoria, supongo que no lo haría. malloc comi
anton_rh