从svn库更新返回“无法读取块大小”错误
当使用龟svn客户端从subversion版本库更新时,我看起来像这样的错误:
Could not read chunk size: An existing connection was forcibly closed by the remote host.
它不阻止我更新,只是中断更新过程,所以我必须重复更新几次,才能完成。
什么会导致这样的行为,以及如何解决?
我从几台机器上的客户端收到“无法读取块大小”消息。
解决这个问题的关键是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.然后,我login了一个新的shell,并确认通过ulimit -n
增加了限制。 然后重新启动Apache。
我刚刚得到了'无法读取块大小'的错误,find了解决scheme – 至less在一个场景。
首先,我的configuration…
服务器:在Windows Server 2003 32位上运行的CollabNet Subversion边缘服务器2.0.0-2190.74(Subversion二进制文件1.6.17-2190.74)。
客户端: TortoiseSVN 1.6.16,生成21511 – 32位(Subversion 1.6.17)在Windows XP专业版32位与SP3上运行。
重现步骤…
我右键拖动版本的子文件夹到我的本地工作副本文件夹中的另一个版本化的子文件夹,然后select“SVN在此处拷贝版本化的项目” (这是Windows资源pipe理器中的TortoiseSVN上下文菜单命令,拖动文件夹)。 子文件夹包含一个ANSI编码的文本文件,MANIFEST.MF,我相信我没有修改(我的Subversionconfiguration不包括.MF文件的MIMEtypes)。 我后来犯了新复制的子文件夹。 后来,无论何时我试图更新我的Subversion本地工作副本文件夹在这台PC上,我得到块大小错误。
变通……
我通过重新启动Subversion / Apache服务来解决这个问题(它本身并没有帮助,也可能没有必要),然后从我的本地工作副本文件夹中删除新添加的子文件夹 (它已经把它放到回购站,所以我不会失去任何东西), 然后执行一个更新 ,成功没有块大小的错误,并重新获取我刚刚删除的子文件夹。
在我的情况下,我以这种方式复制了两个版本化的子文件夹,并且我无法成功更新我的本地工作副本文件夹的根目录,直到我删除了这两个新的子文件夹。
跟进…
我认为这是Subversion服务器和/或TortoiseSVN客户端中的一个错误,但是我没有debugging技能来做出这个决定。 我会在TortoiseSVN问题跟踪器中报告我的发现,看看发生了什么。
我刚刚遇到了这种情况,这不是服务器问题。 我的工作副本被损坏了(顺便说一下,我)。
closures客户端防病毒后,问题和(其他)消失。
我通过Apache使用Subversion 1.7.4的Ubuntu服务器。
检查Apache的错误日志,应该有一个错误号码logging在那里的错误。 这个数字将有助于找出为什么连接被删除。
如果错误日志中没有任何内容,请检查您的病毒扫描程序/防火墙设置:如果他们认为传输的数据是危险的,那么其中一些工具将断开连接。
对我们来说,问题是Apache的超时。 更新大约需要15分钟,但是Apache在10分钟后超时,导致我们的SVN服务器发出你所看到的错误。 最终的解决scheme是增加Apache的超时设置。 我们使用VisualSVN服务器 – 有关如何更改此设置的详细说明,请看这里: http : //adventuresindotnet.blogspot.com/2010/09/svn-trouble.html
我更改为Ubuntu服务器,并且在多个客户端PC,操作系统和客户端版本中出现同样的错误。
确保文件限制设置和Apache超时设置都符合build议。
(见http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/ )
我最终通过使用apache2-mpm-prefork软件包而不是apache2-mpm-worker软件包解决了这个问题。
在重命名文件夹并提交后,我在更新时收到了相同的错误消息。 我创build了一个新的工作目录,并没有收到错误。 所以,我只是将我的更改移动到新的工作目录,提交并吹走了旧的目录。
所以,这个错误似乎是由我的本地目录损坏引起的。
我也明白 我们的服务器是在Windows上运行的Apache。 我的客户端连接速度很高,但延迟时间较长(200毫秒)。难题的另一部分是我正在运行Windows Vista。 转向自动缩放和RSS似乎改善的情况,但不解决它。
这个错误信息还有另一个令人讨厌的原因。 它可能是你的路由器或你的路由器的固件。
我最近把我的Linksys WRT110的固件从版本1.0.02升级到了1.0.07,之后,Subversion不能再将新文件添加到版本库。 它只能更新现有的文件。 回滚到1.0.02修复了这个问题。
资料来源:
- http://blog.wouldbetheologian.com/2008/12/warning-on-linksys-wrt110-firmware.html
- http://homecommunity.cisco.com/t5/Wireless-Routers/Upgraded-WRT-110N-to-1-0-07-and-now-Subversion-won-t-work/td-p/321812
基本上,任何时候连接突然下降,你会得到这个错误。 可能是Apache上的一个configuration错误,就像你们许多人所说的那样。 这也可能是由于服务器速度慢或负载过重,或者可能是由于廉价的路由器,就像我的情况。
这显然有很多原因,但对我来说这是通过重新启动我的SVN服务器(VisualSVNServer 2.5.1)修复的。 对新加载的转储进行完整的回购结账时,会频繁发生。
对我们来说,解决方法是将 SVN 客户端从1.8 降级到1.7(与TortoiseSVN绑定的命令行客户端)。
VisualSVN 2.5.8:有同样的错误,接下来的步骤帮助我解决这个错误:
在服务器上:
- 在服务器有问题的文件夹上删除;
- 重新启动VisualSVN服务器。
在工作站上:
- 更新父文件夹;
- 再次添加文件夹和文件;
- 添加到SVN;
- 承诺。