git push fatal:无法创建线程:资源暂时不可用

时间:2012-03-28 10:05:27

标签: git git-push

我是git的新手。 我想将一个大型提交推送到远程服务器,但问题是 当我使用

git push origin master

它返回错误

Counting objects: 5009, done.
Delta compression using up to 16 threads.
fatal: unable to create thread: Resource temporarily unavailable
error: pack-objects died with strange error

无论如何,我可以为Delta Compression设置最大线程使用。

感谢您的帮助,

袁晨

4 个答案:

答案 0 :(得分:110)

错误:“致命:无法创建线程:资源暂时不可用”强烈建议您在服务器上耗尽内存,如果您的存储库包含大量大文件,这可能会导致重新启动打包以占用大量内存或有限的虚拟内存 - 一般情况下,或仅因为ulimit设置而占用该帐户。

无论如何,这里有一些命令可以通过登录到远程系统(就像git运行的用户那样)来限制打包可能占用的内存量并输入以下命令:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"

希望这有效。

答案 1 :(得分:4)

我也偶然发现了这个错误。为简化起见,出现此错误的原因是您要将100mb文件复制到可用空间为50mb(或更少)的硬盘中。要解决此问题,请将SSH连接到服务器并运行以下命令:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"

答案 2 :(得分:2)

unable to create thread: Resource temporarily unavailable”表示远程服务器出现问题(不再有可用内存)。

关于delta,您可以使用以下config进行调整:

pack.deltaCacheSize
  

在将git-pack-objects(1)写入包之前用于缓存增量的最大内存(以字节为单位)。
  此缓存用于加速写入对象阶段,一旦找到所有对象的最佳匹配,就不必重新计算最终的增量结果。
  尽管如此,在内存紧张的计算机上重新打包大型存储库可能会受到严重影响,尤其是当此缓存推动系统进行交换时。   值为0表示没有限制   可以使用1字节的最小大小来虚拟地禁用该高速缓存。默认为256 MiB。

pack.deltaCacheLimit
  

在git-pack-objects(1)中缓存的delta的最大大小。
  此缓存用于加速写入对象阶段,一旦找到所有对象的最佳匹配,就不必重新计算最终的增量结果。默认为1000.

SO问题“Git pull fails with bad pack header error”引用其他pack相关的配置。

答案 3 :(得分:0)

在共享托管中,我们有限的cpu资源(大多数为1 cpu),因此多线程在这里不能很好地工作。此错误实际上是由于有限的cpu资源引起的。

仅此一个git设置就足以解决此问题。

git config --global pack.threads "1"

这限制了git只能创建一个线程。