web-dev-qa-db-ja.com

GitPush-次善のパック-メモリ不足

私は本当にここでいくつかの助けを使うことができました。

開発プッシュの本番ターゲットとして機能する新しいベアリポジトリを作成しました。また、サーバー上にgitリポジトリとして機能するWebディレクトリがあります。サーバーはcentos5.5でgit1.7.4.1を実行しています

Webディレクトリに新しいリポジトリを作成した後、gitaddを実行しました。それは2300のようなものといくつかの奇妙なファイルと23万以上の挿入を集計しました。

新しく追加されたファイルベースのコミットを行いました。きれいに行きました。ただし、git Push Originマスターを実行すると、これが表示され続けます(CPUが8つあるため、スレッドが8つあることに注意してください。ドキュメントによるとこれは正常です)。

# git Push --mirror
Counting objects: 2000, done.
Delta compression using up to 8 threads.
warning: suboptimal pack - out of memory
fatal: inflateInit: out of memory (no message)
error: failed to Push some refs to '/home/ggadmin/gg-prod.git'

これを解決するために次のことを試みましたが、すべて同じ結果が得られます。

git repack -adf --window-memory=100m
                                ^ tried running this up to 1024m. Same result.

強制プッシュを試しても同じことがわかりましたが、mallocエラーが発生しました。

# git Push -f Origin master
Counting objects: 2000, done.
Delta compression using up to 8 threads.
warning: suboptimal pack - out of memory
fatal: Out of memory, malloc failed (tried to allocate 2340 bytes)
error: failed to Push some refs to '/home/ggadmin/gg-prod.git'

私はこれに2日間取り組んでおり、グーグルとここSOで見つけることができるほぼすべてを試しました。

私はこれを修正しようとして私の知恵の終わりに達しました。この仕事をするために何ができるか知っている人がいると言ってください。

18
Skittles
  1. Gitは、大量の大きなblobを処理するための最適ではないツールである可能性があります。
  2. マルチスレッド圧縮を無効にしてメモリを節約できます:git config pack.threads 1(新しいGitのcore.bigfilethresholdなどの他のメモリ制限オプションに加えて)
17
Vi.

次のコマンドで問題が修正されました。

git config --global pack.windowMemory 256m

これはデルタ圧縮の有効性に影響するため、ハードウェアと帯域幅に応じて、最初に1gなどのより大きなサイズを試してみることをお勧めします。

詳細はこちら: https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

12
keremispirli
git config --global pack.threads 1
7
miguelbemartin

Gitクローンでも同じ問題が発生しました。リポジトリは25GBでした。別のコマンドを使用しました。ソースのルート制御が必要でした。

rsync -avz -e ssh --progress user@computerName:repo/Directory destination/folder

この後、他のリポジトリと同じようにコミットしてプルすることができました。

3
Ashitakalax

私の場合、パーティションを解放してメインパーティションのサイズを増やすことができるように、ページングファイルを削除するために、以前はサーバーの仮想メモリをゼロに減らしていました。これは私の作業メモリーを減らす効果があり、その結果、gitは大きなファイルを処理できませんでした。仮想メモリを再び増やした後、すべてがソートされました。

1
MrJedi2U

この答えのどれも私を助けませんでした。私の問題は、私の小さなサーバーに1GBのRAMがあり、スワップがないことでした。Sudo service Apache2 stopSudo service mysql stop + htopから未使用のプロセスを1つ強制終了しました(結局、私は最大100mbのRAMを取得します)そしてgit Pushは正しいです。

0

これはゲームの少し遅いことだと思いますが、上記のいくつかが私を助けてくれたので(@Ashitakalaxに感謝します)、ここに私の2セントがあります。変更をWordpress devインスタンスのアップストリームからテストに移動すると、上記と同じ問題(inflateInit:メモリ不足)、gitはメモリ不足で中止されます。これは、通常、.. /の変更が原因です。画像ファイルを保持するuploads /ディレクトリ。これらはすべて、グローバルgit構成にアクセスできない共有ホストにあるため、次のようにします。

0- in repo: git commit -m "some relevant details"

変更を記録する

1- rsync -av --progress repo/wp-content/uploads/ test/wp-content/uploads

画像の修正/変更の大部分を移動するには

2- in test: git add -A

物事のテスト側で新しいものを追跡する

3- in test: git fetch Origin

残りをリポジトリからフェッチします

4- in test: git merge Origin/master

そして最後にマージ...

Rsyncビットはgitの負荷を軽減し、すべてが順調です。

0
cucu8