web-dev-qa-db-ja.com

Gitクローンがメモリ不足エラーで失敗する-「致命的:メモリ不足、mallocが失敗しました(905574791バイトを割り当てようとしました)/致命的:インデックスパックが失敗しました」

大容量(1.4GB)のGitリポジトリを32ビットのDebian VM、384MBのRAMを搭載)に複製しようとしています。Git1.7.2.5を使用しており、SSHプロトコルを使用してクローン( 'git clone [email protected]:/ my/repo')

クローンは次のメッセージで失敗します:

remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed

Gitがホストリポジトリ側で再パックするために使用するメモリの量を減らして、再パックしようとしました。

git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d

私の質問は次のとおりです。

  1. これはクライアントサイズ(クローン側)の問題ですか、それともクローン元のリポジトリで解決する必要がありますか?
  2. どちらの場合でも、クローンを成功させるために私にできることはありますか?オンラインで考えられる解決策の多くは、次のことの一部またはすべてを含みますが、この場合はどれも受け入れられません。

    • リポジトリの内容を大幅に変更する(つまり、大きなファイルを削除する)
    • クローンを実行しているVM
    • クローンを実行しているVM)に64ビット仮想CPUを与える
    • 帯域外で転送する(たとえば、RsyncまたはSFTPを使用して.gitディレクトリを転送する)

前もって感謝します。

15
grw

git clonepack.packSizeLimit設定を確認しません。前回確認してから変更されていない限り、とにかくすべてを1つのパックに転送します。

SCPまたはRsyncを使用することは、実際に問題を回避する方法かもしれません。 「役に立たない」大きなファイルを削除してから、クローンを作成しようとしているリポジトリを再パックすることも役立ちます。

より多くのRAMをVMに与えることも役立つかもしれません-900MBを割り当てるために64ビットのアドレス空間は必要ないと思います...あなたRAMを増やす代わりに、900MBパッケージを処理するのに十分なSWAPスペースを与えることもできます。

3
Romain

今日、私は同じ問題を抱えていました。 Gitサーバーのメモリが不足しましたが、gitlabはまだ使用可能なメモリがあると報告しました。 htopでメモリをチェックし(利用可能なものはないと報告されました)、gitlabを再起動すると、すべてが正常に戻りました。

0
MateuszL

MSysGit 32ビットを使用してWindowsで同様の問題が発生しました。 Cygwin からのgit64ビットがその仕事をしました。たぶん、64ビットのDebian VM(32ビットのものではなく)を使用する必要があります。

私の 元の回答 質問で利用可能です WindowsでGit、「メモリ不足-mallocが失敗しました」

0
olibre