LINUX.ORG.RU

потребление памяти git gc --aggressive

 , , ,


0

1

Почему при пережатии репозиториев такой разный расход памяти, что на это влияет, и существует ли правило хорошего коммита в контексте эффективности хранения?

Вот для первой репы одной конторы:

$ du -sh .git && time git gc --aggressive && du -sh .git
106M    .git
Counting objects: 85507, Fertig.
Delta compression using up to 8 threads.
Compressing objects: 100% (83185/83185), Fertig.
Writing objects: 100% (85507/85507), Fertig.
Total 85507 (delta 48961), reused 34092 (delta 0)

real    5m5.723s
user    16m53.928s
sys     0m11.548s
78M     .git
$

top:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 8739 gag  20   0 21,663g 0,015t  13192 S 200,0 95,26  16:03.76 git

Для пережатия 106MB --> 78 MB понадобилось 15+ GB памяти!!!

А вот для второй:

du -sh .git && LC_ALL=C time git gc --aggressive && du -sh .git
370M    .git
Counting objects: 441196, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (435440/435440), done.
Writing objects: 100% (441196/441196), done.
Total 441196 (delta 340323), reused 98133 (delta 0)
Checking connectivity: 441196, done.
1033.24user 3.64system 3:37.37elapsed 476%CPU (0avgtext+0avgdata 13100464maxresident)k
0inputs+566784outputs (0major+2111645minor)pagefaults 0swaps
282M    .git

top:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
15726 gag  20   0 12,640g 0,012t 337564 S 100,3 76,19  16:57.23 git

Понадобилось 12+ GB. Причём расход резко растёт с всего 1 GB на 99% (~434000 объект).

А если пережимать ванильный linux.git, который весит 860+ MB, то хватает и 4 GB оперативки.

$ du -sh .git && LC_ALL=C time git gc --aggressive && du -sh .git
862M    .git
Counting objects: 4147770, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4116901/4116901), done.
Writing objects: 100% (4147770/4147770), done.
Total 4147770 (delta 3484456), reused 663280 (delta 0)
Checking connectivity: 4147770, done.
4777.02user 31.57system 11:38.36elapsed 688%CPU (0avgtext+0avgdata 4787684maxresident)k
0inputs+1698728outputs (0major+20081695minor)pagefaults 0swaps
862M    .git
$

top:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
12637 gag  20   0 5148492 4,555g 852956 R 100,0 29,11  79:15.25 git

Как смотреть эти объекты по номеру, который выдаёт git в процессе пережатия?

И где формула для total <-> compressing <-> delta <-> reused объектов?

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.