从svn存储库更新返回“无法读取块大小”错误

时间:2009-04-21 14:39:06

标签: svn tortoisesvn connection

使用tortoise svn客户端从subversion存储库更新时,我得到的错误如下:

Could not read chunk size: An existing connection was forcibly closed by the remote host.

它不会阻止我更新,只是中断更新过程,所以我必须在完成之前多次重复更新。

什么可能导致此类行为以及如何解决?

13 个答案:

答案 0 :(得分:15)

我从多台计算机上的客户端收到“无法读取块大小”消息。

解决问题的关键是Apache错误日志中的错误:

[Fri May 07 14:26:26 2010] [error] [client 155.35.175.50] Provider encountered an error while streaming a REPORT response.  [500, #0]
[Fri May 07 14:26:26 2010] [error] [client 155.35.175.50] Problem replaying revision  [500, #24]
[Fri May 07 14:26:26 2010] [error] [client 155.35.175.50] Can't open file '/usr/site/svnrep/impc/db/revs/16122': Too many open files  [500, #24]

处理svn操作的Apache进程耗尽了文件描述符。在我的Ubuntu服务器上,我通过编辑/etc/security/limits.conf并在底部添加它来修复它:

*               hard    nofile          5000
*               soft    nofile          5000

这会将文件描述符限制从1024增加到5000.然后我登录了一个新shell并确认通过ulimit -n增加了限制。然后重新启动Apache。

答案 1 :(得分:11)

我刚刚得到'无法读取块大小'错误找到解决方案 - 至少在一种情况下。

首先,我的配置......

服务器:在Windows Server 2003 32位上运行的CollabNet Subversion Edge Server 2.0.0-2190.74(Subversion二进制文件1.6.17-2190.74)。

客户端: TortoiseSVN 1.6.16,Build 21511 - 32位(Subversion 1.6.17)在带有SP3的Windows XP Pro 32位上运行。

重现......

的步骤

右键单击并将版本化的子文件夹拖到我本地工作副本文件夹中的另一个版本化子文件夹中,然后选择'SVN复制版本化项目'(这是一个右键拖动文件夹时,Windows资源管理器中的TortoiseSVN上下文菜单命令)。子文件夹包含一个ANSI编码的文本文件MANIFEST.MF,我相信我没有修改(我的Subversion配置不包含.MF文件的mime类型)。 我随后提交了新复制的子文件夹。稍后,每当我尝试在此PC上更新我的Subversion本地工作副本文件夹时,我都会收到块大小错误。

的变通...

我通过重新启动Subversion / Apache服务解决了这个问题(它本身没有帮助,可能没有必要),然后从我的本地工作副本文件夹中删除新添加的子文件夹(它已经进入了repo,所以我不会丢失任何东西),然后执行更新,它成功没有块大小错误并重新获取我刚刚删除的子文件夹。

在我的情况下,我以这种方式复制了两个版本化的子文件夹,在我删除了这些新子文件夹之前,我无法成功更新本地工作副本文件夹的根目录。

后续...

我认为这是Subversion服务器和/或TortoiseSVN客户端中的一个错误,但我没有调试技巧来做出这个决定。我将在TortoiseSVN问题跟踪器中报告我的发现,看看它在哪里。

答案 2 :(得分:10)

我刚刚遇到这种情况,而不是服务器问题;我的工作副本被破坏了(顺便说一下,我)。

答案 3 :(得分:7)

关闭客户端防病毒后问题和(其他一些)消失了。

我正在通过Apache使用Ubuntu服务器和subversion 1.7.4。

答案 4 :(得分:3)

检查apache错误日志,应该在其中记录错误编号。该数字将有助于找出连接被丢弃的原因。

如果错误日志中没有任何内容,请检查您的病毒扫描程序/防火墙设置:如果他们认为传输的数据很危险,其中一些工具将断开连接。

答案 5 :(得分:2)

对我们来说问题是Apache的超时。更新大约需要15分钟,但Apache在10分钟后超时,导致我们的SVN服务器发出您看到的错误。最终的解决方案是增加Apache的超时设置。我们使用VisualSVN服务器 - 有关如何更改此设置的详细说明,请查看此处:http://adventuresindotnet.blogspot.com/2010/09/svn-trouble.html

答案 6 :(得分:1)

我改为Ubuntu服务器,我们遇到了同样的错误 - 跨多个客户端PC,操作系统和客户端版本。

确保文件限制设置和Apache超时设置都符合建议。

(见http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

我最终通过使用apache2-mpm-prefork软件包而不是apache2-mpm-worker软件包解决了这个问题。

答案 7 :(得分:1)

重命名文件夹并提交后,我在更新时收到同样的错误消息。我创建了一个新的工作目录,但没有收到错误。所以,我只是将我的更改移动到新的工作目录,提交并吹掉旧目录。

所以,这个错误似乎是由我的本地目录损坏造成的。

答案 8 :(得分:0)

我也明白了。我们的服务器是在Windows上运行的Apache。我的客户端连接速度很快,但延迟时间有点高(200毫秒)。另一个难题是我正在运行Windows Vista。转动自动缩放和rss似乎改善了这种情况,但没有解决它。

答案 9 :(得分:0)

此错误消息还有另一个恼人的原因。它可能是您的路由器或路由器的固件。

我最近将Linksys WRT110的固件从版本1.0.02升级到1.0.07,之后,subversion无法再将新文件添加到存储库。它只能更新现有文件。回滚到1.0.02解决了问题。

来源:

基本上,只要突然断开连接,您就会收到此错误。可能是Apache上的配置错误,就像许多人所说的那样。这也可能是由于服务器速度缓慢或连接过载,或者可能是由于便宜的路由器造成的,就像我的情况一样。

答案 10 :(得分:0)

这显然有很多原因,但对我来说,这是通过重新启动我的SVN服务器(VisualSVNServer 2.5.1)来解决的。在新加载的转储上执行完全repo签出时,这种情况经常发生。

答案 11 :(得分:0)

对我们来说,解决方法是将SVN 客户端 降级从1.8降级到1.7(与TortoiseSVN捆绑在一起的命令行客户端)。

答案 12 :(得分:0)

VisualSVN 2.5.8:如果出现同样的错误,接下来的步骤有助于我解决此错误:

在服务器上:

  1. 在服务器有问题的文件夹中删除;
  2. 重新启动VisualSVN服务器。
  3. 在工作站上:

    1. 更新父文件夹;
    2. 再次添加文件夹和文件;
    3. 添加到SVN;
    4. 提交。