【问题标题】:git push fatal: unable to create thread: Resource temporarily unavailablegit push 致命:无法创建线程:资源暂时不可用
【发布时间】:2012-04-11 21:53:39
【问题描述】:

我是 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 设置最大线程使用量。

感谢您的帮助,

袁辰

【问题讨论】:

  • 通过登录远程系统git config --global pack.windowMemory "100m" git config --global pack.packSizeLimit "100m" git config --global pack.threads "1"可以运行的命令来限制打包可能占用的内存量

标签: git git-push


【解决方案1】:

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

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

git config --global pack.threads "1"

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

【讨论】:

  • 你是英雄,拯救了我的夜晚。谢谢!
  • 感谢为我工作。但是你能解释一下为什么会这样吗?
【解决方案2】:

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

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

【讨论】:

  • 应该是pack.packSizeLimit 而不是pack.SizeLimit
  • 尝试这些返回的xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
  • ^ 如果您有这个问题,请参阅这篇文章:stackoverflow.com/questions/52522565/… - 问题已解决
【解决方案3】:

错误:“致命:无法创建线程:资源暂时不可用”强烈表明您的服务器内存不足,如果您的存储库包含大量大文件,则可能会发生这种情况,这可能会导致重新打包以占用大量内存或有限的虚拟内存 - 通常情况下,或者由于 ulimit 设置而仅针对该帐户。

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

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

希望这行得通。

【讨论】:

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

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) 中。
一旦找到所有对象的最佳匹配,此缓存用于通过不必重新计算最终增量结果来加快写入对象阶段。默认为 1000。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多