git 由于服务器端内存不足,克隆失败
git clone fails due to lack of memory on server side
我正在尝试从位于 Raspberry Pi 3 上的 GOGS 服务器克隆 git 存储库。失败并出现以下投诉:
git clone git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 3008, done.
remote: Counting objects: 100% (3008/3008), done.
error: pack-objects died of signal 9541/2583)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
因为我使用另一台主机的存储库没有任何问题,我认为没有任何损坏。相反,当我在服务器上登录 时,我看到 RAM 急剧下降, 然后 Pi 基本上冻结了,在客户端出现错误后不久,我的 Pi 服务器恢复了它的记忆。所以,我认为 我的克隆失败是因为我在 Rpi.
上的内存不足
我见过几种解决方案,基本上都是使用如下命令。但老实说,我真的不明白我应该放一个小的 window 内存和大小限制,还是一个大的。无论如何,我尝试了 20m 和 100m,但没有任何效果:(
$ git config --global pack.windowMemory "100m"
$ git config --global pack.SizeLimit "100m"
$ git config --global pack.threads "1"
$ git config --global pack.window "0"
$ git config --global core.bigfilethreshold 200K
关于大文件 - 这可能是克隆失败的另一个原因,我可能有一些大文件,但不是太多。 如何检查我的存储库中最大的文件是什么?然后我应该将 core.bigfilethreshold
设置得稍微高一点吗?
此外,我看到有人推荐 git fsck
,但这对我不起作用,因为我的存储库未被克隆。
最后,我不确定上面的命令是否能解决我的问题,如果有任何其他解决方案以便我可以克隆我的存储库,我将不胜感激 :) 如果有办法在服务器端准确地查看问题,让我也知道
日志:
在 RPi(服务器)端,我有以下日志。我不认为它们是相关的,特别是第二个是关于另一个存储库(文档),而我正在尝试克隆(prog):
home/git/gogs/log $ sudo cat serv.log
2021/08/27 11:13:05 [FATAL] [...ogs/gogs/cmd/serv.go:268 runServ()] Fail to execute git command: exit status 128
/home/git/gogs/log $ sudo cat gogs.log
2021/08/27 00:16:18 [ WARN] Failed to perform health check on repository '/home/git/gogs-repositories/axelle/docs.git': execution is timeout [duration: 1m0s]
已编辑(2021 年 9 月 2 日)
- 我正在寻找将 GOGS 服务器保留在 RPi 3 上的解决方案。这意味着我不考虑升级到 RPi 4 或向我的 RPI 添加 RAM 的解决方案...
- 我尝试了一个
git clone --depth 1 git@192.168.0.62:axelle/prog.git
,它可能接近工作...但到最后就内存不足了。
输出:
git clone --depth 1 --branch master git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 1355, done.
remote: Counting objects: 100% (1355/1355), done.
error: --shallow-file died of signal 98/1125)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
在 Raspberry Pi 上,RAM 有限,无法轻松添加更多。在您需要更多 RAM 的情况下(这是 GOGS 故障的情况),解决方案是使用或增加交换文件的大小。
在我的例子中,交换文件已经配置为 100M,但是不够。增加它(例如1G):
- 暂时禁用交换文件:
sudo dphys-swapfile swapoff
- 编辑文件
/etc/dphys-swapfile
并修改 CONF_SWAPSIZE
。示例:CONF_SWAPSIZE=1024
- 安装此大小的系统:
sudo dphys-swapfile setup
- 重新启用交换文件:
sudo dphys-swapfile swapon
这解决了我遇到的问题,Git 服务器在 RPi 上失败,因为它缺少 RAM。
$ git clone git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 3019, done.
remote: Counting objects: 100% (3019/3019), done.
remote: Compressing objects: 100% (2594/2594), done.
Receiving objects: 100% (3019/3019), 638.82 MiB | 2.30 MiB/s, done.
remote: Total 3019 (delta 1217), reused 1353 (delta 234)
Resolving deltas: 100% (1217/1217), done.
Updating files: 100% (1158/1158), done.
注意:
- 使用交换文件会比 RAM 慢
- 根据您的情况,您需要调整交换文件的大小。
dphys-swapfile setup
检查您没有要求超过 50% 的可用磁盘 space。这确保您的交换文件大小合理。如果您的磁盘快满了,您需要先制作磁盘 space。
- 此解决方案仅适用于Git服务器端内存不足导致的服务器故障!
我正在尝试从位于 Raspberry Pi 3 上的 GOGS 服务器克隆 git 存储库。失败并出现以下投诉:
git clone git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 3008, done.
remote: Counting objects: 100% (3008/3008), done.
error: pack-objects died of signal 9541/2583)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
因为我使用另一台主机的存储库没有任何问题,我认为没有任何损坏。相反,当我在服务器上登录 时,我看到 RAM 急剧下降, 然后 Pi 基本上冻结了,在客户端出现错误后不久,我的 Pi 服务器恢复了它的记忆。所以,我认为 我的克隆失败是因为我在 Rpi.
上的内存不足我见过几种解决方案,基本上都是使用如下命令。但老实说,我真的不明白我应该放一个小的 window 内存和大小限制,还是一个大的。无论如何,我尝试了 20m 和 100m,但没有任何效果:(
$ git config --global pack.windowMemory "100m"
$ git config --global pack.SizeLimit "100m"
$ git config --global pack.threads "1"
$ git config --global pack.window "0"
$ git config --global core.bigfilethreshold 200K
关于大文件 - 这可能是克隆失败的另一个原因,我可能有一些大文件,但不是太多。 如何检查我的存储库中最大的文件是什么?然后我应该将 core.bigfilethreshold
设置得稍微高一点吗?
此外,我看到有人推荐 git fsck
,但这对我不起作用,因为我的存储库未被克隆。
最后,我不确定上面的命令是否能解决我的问题,如果有任何其他解决方案以便我可以克隆我的存储库,我将不胜感激 :) 如果有办法在服务器端准确地查看问题,让我也知道
日志:
在 RPi(服务器)端,我有以下日志。我不认为它们是相关的,特别是第二个是关于另一个存储库(文档),而我正在尝试克隆(prog):
home/git/gogs/log $ sudo cat serv.log
2021/08/27 11:13:05 [FATAL] [...ogs/gogs/cmd/serv.go:268 runServ()] Fail to execute git command: exit status 128
/home/git/gogs/log $ sudo cat gogs.log
2021/08/27 00:16:18 [ WARN] Failed to perform health check on repository '/home/git/gogs-repositories/axelle/docs.git': execution is timeout [duration: 1m0s]
已编辑(2021 年 9 月 2 日)
- 我正在寻找将 GOGS 服务器保留在 RPi 3 上的解决方案。这意味着我不考虑升级到 RPi 4 或向我的 RPI 添加 RAM 的解决方案...
- 我尝试了一个
git clone --depth 1 git@192.168.0.62:axelle/prog.git
,它可能接近工作...但到最后就内存不足了。
输出:
git clone --depth 1 --branch master git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 1355, done.
remote: Counting objects: 100% (1355/1355), done.
error: --shallow-file died of signal 98/1125)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
在 Raspberry Pi 上,RAM 有限,无法轻松添加更多。在您需要更多 RAM 的情况下(这是 GOGS 故障的情况),解决方案是使用或增加交换文件的大小。
在我的例子中,交换文件已经配置为 100M,但是不够。增加它(例如1G):
- 暂时禁用交换文件:
sudo dphys-swapfile swapoff
- 编辑文件
/etc/dphys-swapfile
并修改CONF_SWAPSIZE
。示例:CONF_SWAPSIZE=1024
- 安装此大小的系统:
sudo dphys-swapfile setup
- 重新启用交换文件:
sudo dphys-swapfile swapon
这解决了我遇到的问题,Git 服务器在 RPi 上失败,因为它缺少 RAM。
$ git clone git@192.168.0.62:axelle/prog.git
Cloning into 'prog'...
remote: Enumerating objects: 3019, done.
remote: Counting objects: 100% (3019/3019), done.
remote: Compressing objects: 100% (2594/2594), done.
Receiving objects: 100% (3019/3019), 638.82 MiB | 2.30 MiB/s, done.
remote: Total 3019 (delta 1217), reused 1353 (delta 234)
Resolving deltas: 100% (1217/1217), done.
Updating files: 100% (1158/1158), done.
注意:
- 使用交换文件会比 RAM 慢
- 根据您的情况,您需要调整交换文件的大小。
dphys-swapfile setup
检查您没有要求超过 50% 的可用磁盘 space。这确保您的交换文件大小合理。如果您的磁盘快满了,您需要先制作磁盘 space。- 此解决方案仅适用于Git服务器端内存不足导致的服务器故障!