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

Yua*_*hen 40 git git-push

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

git push origin master
Run Code Online (Sandbox Code Playgroud)

它返回错误

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
Run Code Online (Sandbox Code Playgroud)

那么无论如何我可以设置Delta Compression的最大线程使用.

感谢帮助,

袁晨

小智 122

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

无论如何,这里是你可以运行的命令,通过登录到远程系统(作为git运行的用户)并键入以下命令来限制打包可能占用的内存量:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
Run Code Online (Sandbox Code Playgroud)

希望这有效.

  • 许多共享托管解决方案专门限制线程.通常使用此答案中的最后一个命令将其降低到<10可以解决问题. (25认同)
  • 我在我的共享主机上遇到了这个问题,试图将`git push`转移到远程.设置`pack.threads"10"`为我修好了.当它进入重新打包阶段时,我试图运行`git gc`时遇到了类似的问题.同样的修复.干杯. (4认同)
  • 如果您的服务器使用智能 http 协议,您可能无法为该进程设置全局配置。相反,`cd` 进入 git 存储库本身的目录,并在没有 `--global` 的情况下运行相同的命令。 (2认同)
  • 我可以确认,使用Inmotion共享托管,将`git config --global pack.threads“ 5”设置为足以解决问题。谢谢! (2认同)

Muz*_*ood 33

在共享主机中,我们的 cpu 资源有限,主要是 1 个 cpu,因此多线程在那里不能很好地工作。这个错误实际上是由于有限的 CPU 资源。

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

git config --global pack.threads "1"
Run Code Online (Sandbox Code Playgroud)

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

  • 你是个英雄,拯救了我的夜晚。谢谢你! (2认同)

小智 5

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

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
Run Code Online (Sandbox Code Playgroud)

  • 它应该是pack.packSizeLimit而不是pack.SizeLimit。 (2认同)

Von*_*onC 3

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

关于 delta,您需要调整以下配置:

pack.deltaCacheSize
Run Code Online (Sandbox Code Playgroud)

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

pack.deltaCacheLimit
Run Code Online (Sandbox Code Playgroud)

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

SO问题“ Git pull因错误的包头错误而失败”引用了其他pack相关的配置。