мерзавец из памяти

6

Я должен очистить свой репозиторий с Git git gc. К сожалению, я получаю фатальную ошибку памяти.

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

Это с git 1.7.4 на Ubuntu 10.4.

Есть идеи, чтобы обойти эту проблему?

BetaRide
источник
Какую версию Git вы используете, и на какой ОС вы ее используете?
VonC

Ответы:

2

В 64-битной ОС для запуска gitтребуется огромный объем виртуальной памяти git-gc, около 8 ГБ. Обычно никто не ограничивает виртуальную память в 64-битной ОС, потому что подобный тип лишает смысла наличие 64-битной ОС, но некоторые «необразованные» системные администраторы или пользователи делают это. Если у вас есть ограничение ресурсов для виртуальной памяти, которое составляет менее 64 ГБ или около того, найдите человека, который его установил, и ударите по ним битой подсказки.

Одним из основных преимуществ 64-разрядных операционных систем является то, что адресное пространство не является дефицитным ресурсом.

Я полагаю, что в более новых версиях gitесть исправление, но проблема действительно не в этом git.

Дэвид Шварц
источник
В любой многопользовательской системе абсолютно необходимо ограничить использование виртуальной памяти, если вы несете ответственность за системного администратора. В противном случае любая мошенническая или ошибочно написанная программа может легко инициировать OOM-убийцу, что может быть самым страшным случаем
Cougar
@Cougar: Чистые страницы виртуальной памяти никогда не могут вызвать убийцу OOM. Вы можете ограничить количество поддерживаемых страниц, если хотите.
Дэвид Шварц
Я хотел бы понизить этот ответ (недостаточно повторений). Проблема определенно в самом мерзавце. Почему для процедуры очистки требуется 8 ГБ !!! памяти? Это не разумно. И почему вы думаете, проблема с виртуальной памятью? Проблема в том, что git не может получить достаточно свободной памяти.
anton_rh
@anton_rh Когда вы говорите, что использование 8 ГБ памяти нецелесообразно, вы говорите о физической памяти, то есть ОЗУ. Проблема не в том, что git не может получить достаточно свободной памяти, а в том, что git не может получить достаточно виртуальной памяти. Пожалуйста, прочитайте мой ответ еще раз, особенно первое предложение. В современных ОС виртуальная память не является дефицитным ресурсом, поэтому разработчики редко прилагают усилия для ее минимизации. Например, 64-разрядное приложение может решить отображать в памяти 8 ГБ файлов. Почему нет? Для этого будет использоваться 8 ГБ виртуальной памяти, и если кто-то установит ограничение на виртуальную память приложения, у него не хватит «памяти».
Дэвид Шварц
@DavidSchwartz, я не налагал никаких ограничений на виртуальную машину (на самом деле, я никогда не слышал о таких ограничениях). На 99% вся система начинает работать очень медленно (я думаю, потому что она активно использует своп). Так что, я думаю, проблема в физической памяти, а не в виртуальной. Если gitбы не нужно было так много памяти, я думаю, это не mallocсъело бы это.
anton_rh