对gitlab 6.5的HTTPS请求超时

时间:2014-02-11 08:54:40

标签: timeout unicorn gitlab

我在这里设置了非常酷的gitlab:

  • apache 2.2.22-1ubuntu1.4
  • gitlab 6.5(使用mod_proxy集成到apache)
  • 独角兽 v4.3.1(rails webserver)
  • 2英镑上/下连接到互联网
然而,当做一个' git clone'或者' git pull'它无法用于存储库> 10个Mib尺寸。

ubuntu~/Projects/git/myRepo(master|✔) % git pull 
Username for 'https://example.org': my.username@mydomain.de 
Password for 'https://my.username@mydomain.de@example.org': 
remote: Counting objects: 7798, done. 
remote: Compressing objects: 100% (4132/4132), done. 
fatal: The remote end hung up unexpectedlyiB | 222 KiB/s     
fatal: early EOF
fatal: index-pack failed 

它似乎能够复制 8Mib的数据并且最多运行约30秒。这个问题每次都可以重现,并且一遍又一遍地显示出相同的故障迹象。

我读过: http://jinsucraft.wordpress.com/2013/01/08/when-github-git-clone-fails-with-early-eof-and-index-pack-failed/并尝试过:

git config --global http.postBuffer 524288000

在客户端无济于事。

任何人都知道可能导致这种情况的原因吗?

1 个答案:

答案 0 :(得分:7)

此问题的原因可能是超时问题(或类似限制,例如数据量):发生服务器端超时,这会关闭http连接,从而导致客户端“早期EOF”错误消息。这样的超时可以在几个地方配置(我在这里列出它们,因为其他Web服务器可能有类似的设置,所以它们可能会给你一个提示在哪里看):

  • Apache的Timeout确定在断开连接之前绝对静默的时间(即没有数据传输)。由于数据是连续收到的,所以这不是问题所在。
  • Apache mod_proxy的ProxyTimeout是上述Timeout的专门设置。同样,因为它不是总请求时间的限制,所以这不是问题。
  • Apache可以使用LimitRequestBody限制POST请求的大小;默认值是无限制,但这可能会在您的发行版配置中有所不同
  • gitlab的Unicorn configuration example建议超时30秒。这是绝对超时,例如每次请求的时间超过30秒将被终止。

增加Unicorn配置中的超时应该可以解决您的问题。请记住,并行请求的数量也受到Unicorn的限制。克隆一个大型repo会阻塞一个请求,但几乎不会导致CPU负载。如果您的gitlab服务器没有高流量配置文件,您应该考虑增加worker_process号码。

作为旁注:gitlab.yml配置还提供git timeout;这个超时限制了git操作,比如计算几次提交的差异。克隆/拉动时,它对超时没有影响。