我正在阅读其他类似标题的帖子,但似乎与我无关。我在我当地的ubuntu盒子里有一个git repo。我的文件是mysql dump我分成2mb文件。当我git gc时,这是输出:
git@pc:~/repos/x$ git gc
Counting objects: 17244, done.
Delta compression using up to 4 threads.
Killedssing objects: 90% (2491/2767)
error: failed to run repack
有没有办法追踪导致的原因?我已经尝试了
git config --global pack.windowMemory "20m"
git config --global pack.packSizeLimit "20m"
git config --global pack.threads "1"
但这是输出
git@pc:~/repos/x$ git gc
Counting objects: 17244, done.
Killedssing objects: 3% (88/2767)
error: failed to run repack
修改
这对我有用:
git config --global pack.windowMemory "20m"
git config --global pack.packSizeLimit "20m"
git config --global pack.threads "4"
git config --global pack.window "2"
git config --global pack.depth "10"
似乎因为我只有256 ram vps。和其他过程已经吃100mb。我也会尝试升级我的vps,因为这个配置使得git gc和git clone非常慢。
再次编辑 经过更多的调查,这是因为线程。我有4个虚拟核分配给我的vps,当我把pack.threads“2”没有其他时,问题就消失了。
我让我的提供者给我更多的ram,但这没有帮助。只有在我配置线程时。希望这能帮到别人
答案 0 :(得分:3)
在输出中,看起来在delta压缩阶段,进程被Linux OOM Killer等外部进程或其他资源管理进程杀死。如果您的内存或磁盘空间不足,那么这将为您提供开始调查的合理位置。
您也可以考虑在strace下运行您的流程。这通常会告诉您程序在收到信号时正在做什么,但可能并不总是告诉您信号发送者实际上是谁。
如果strace使您失败,Git源目前有12个sigaction(2)引用,您可以通过检查siginfo_t struct来确定信号发送方。这很可能需要核心转储或交互式调试器,例如gdb。