Vor einiger Zeit habe ich eine Frage gestellt, in der ich um Feedback zu einem Plan bat, ein Repo zu reparieren, das wegen vieler großer, binärer Dateien langsam war. Diese Frage (nicht unbedingt ein Muss): Repariere ein Git Repo, das wegen großer Binärdateien verlangsamt wird
Ich folgte meinem Plan und erlebte unerwartete Nebenerscheinungen.
Ein frischer Klon unseres Repos hat ursprünglich 2-3 Stunden gedauert. Es wurde herausgefunden, dass der Server mit dem Swapping begonnen hat, und nachdem git config pack.windowMemory 100m & amp; & amp; git config pack.packSizeLimit 200m , die Klonzeit sank auf ~ 15 Minuten.
Ich dachte, ich würde immer noch den Rest meines Plans machen, also deaktivierte ich Delta-Komprimierung für die Binär-Typen, die wir haben, und lief git repack -a -d -F auf dem Repo.
Danach dauert ein frischer Klon des Repo ~ 20 Minuten, also wurde es tatsächlich schlimmer. Aber das eigentliche Problem ist, dass jedes Mal, wenn jemand, der die Repos bereits geklont hat, Commits zu pushen, "Automatisches Packen des Repositorys für optimale Leistung" erhalten wird.
Irgendwelche Ideen, was schief gelaufen sein könnte und wie es behoben werden kann?
Wahrscheinlich ist die Größe Ihres Repos und Ihr niedriger Wert für pack.packSizeLimit
bewirkt, dass die Anzahl der Pakete immer über gc.autopacklimit
liegt. Also erhöhen Sie einen von ihnen, um sicherzustellen, dass der GC nicht jedes Commit ausführt.
Ich bin mir nicht sicher, auf welche Weise packSizeLimit
das Gedächtnis beeinflussen würde, aber ich glaube nicht, dass es einen signifikanten Effekt hätte. Bitte korrigieren Sie mich, wenn Ihre Experimente etwas anderes zeigen. Die Parameter, die sich direkt auf die Speichernutzung auswirken, sind pack.windowMemory
und pack.deltaCacheSize
.
Was wird umgepackt? Der lokale Klon, die Fernbedienung? Denken Sie daran, dass lokal und remote getrennt sind , bedeutet das wahrscheinlich, dass Sie entpackte Sachen bekommen, die dann lokal gepackt werden ... müssen die Kofiguration der Fernbedienung lokal replizieren (und es erneut versuchen, ich könnte komplett aus sein Basis).
Tags und Links git