从 svn 存储库更新返回“无法读取块大小”错误
Posted
技术标签:
【中文标题】从 svn 存储库更新返回“无法读取块大小”错误【英文标题】:Updating from svn repository returns "Could not read chunk size" error 【发布时间】:2010-10-20 20:22:47 【问题描述】:使用 tortoise svn 客户端从 subversion 存储库更新时,出现如下错误:
Could not read chunk size: An existing connection was forcibly closed by the remote host.
它并没有阻止我更新,只是中断了更新过程,所以我必须重复更新几次,才能完成。
什么会导致这种行为以及如何解决?
【问题讨论】:
+1 在这里相同。烦人的是,客户端错误信息归咎于服务器,而apache服务器日志根本没有显示任何错误。 您的服务器端设置是什么?在我们的例子中,存储库由 Windows 系统上的 apache 网络服务器托管。 【参考方案1】:我从多台机器上的客户端收到“无法读取块大小”消息。
解决这个问题的关键是 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。
【讨论】:
【参考方案2】:我刚刚收到“无法读取块大小”错误并找到了解决方案——至少在一种情况下。
首先,我的配置...
服务器:在 Windows Server 2003 32 位上运行的 CollabNet Subversion Edge Server 2.0.0-2190.74(Subversion 二进制文件 1.6.17-2190.74)。
客户: TortoiseSVN 1.6.16,内部版本 21511 - 32 位(Subversion 1.6.17)在 Windows XP Pro 32 位 SP3 上运行。
重现步骤...
在我的本地工作副本文件夹中右键单击并拖动版本化子文件夹到另一个版本化子文件夹,然后选择 'SVN Copy versioned item(s) here'(这是一个右键拖动文件夹时 Windows 资源管理器中的 TortoiseSVN 上下文菜单命令)。该子文件夹包含一个 ANSI 编码的文本文件 MANIFEST.MF,我相信我没有修改它(我的 Subversion 配置不包括 .MF 文件的 mime 类型)。 我随后提交了新复制的子文件夹。 后来,每当我尝试在这台 PC 上更新我的 Subversion 本地工作副本文件夹时,都会遇到块大小错误。
解决方法...
我通过重新启动我的 Subversion/Apache 服务解决了这个问题(这本身并没有帮助并且可能没有必要),然后从我的本地工作副本文件夹中删除新添加的子文件夹(它已经进入 repo,所以我不会丢失任何东西),然后执行更新,它成功了,没有块大小错误,并重新获取了我刚刚删除的子文件夹。
在我的例子中,我以这种方式复制了两个版本化的子文件夹,在我删除这两个新子文件夹之前,我无法成功更新本地工作副本文件夹的根目录。
跟进...
我认为这是 Subversion 服务器和/或 TortoiseSVN 客户端中的错误,但我没有调试技能来做出决定。我将在 TortoiseSVN 问题跟踪器中报告我的发现,看看结果如何。
【讨论】:
svn 恢复添加的文件夹/文件,然后删除它们对我有帮助【参考方案3】:我刚遇到这种情况,不是服务器问题;我的工作副本被损坏了(顺便说一句)。
【讨论】:
@Chris 由于 svn 遵循远程存储库模型,我只是在另一个位置检查了另一个工作副本,并将我的更改应用到它的补丁。 在将 DNS 名称从一台服务器移动到另一台服务器后,我得到了类似的结果(两者都有一个同名的存储库),并且客户端仍然有来自旧存储库的工作副本文件并执行 svn 导入新的回购。因此,我们可能称之为“工作副本问题”的问题肯定会导致“块大小错误”。 更好的解决方案是运行清理已损坏文件夹的工作副本,然后再次运行更新。 @Nux 我使用清理命令的成功率很低。 您可能需要检查所有清理选项(包括恢复所有更改)。它每次都对我有用。对于大型回购,这对我来说经常发生(至少对于 1.6 服务器和 1.7 客户端)。【参考方案4】:关闭客户端防病毒软件后,问题和(其他)消失了。
我通过 Apache 使用带有 subversion 1.7.4 的 Ubuntu 服务器。
【讨论】:
是的,卡巴斯基也有问题。 我还报告了卡巴斯基的 svn 问题,错误日志完全相同。 同样的问题,通过禁用 McAfee 解决。谢谢!【参考方案5】:检查 apache 错误日志,那里应该有一个错误记录,并带有错误编号。该数字将有助于找出连接断开的原因。
如果错误日志中没有任何内容,请检查您的病毒扫描程序/防火墙设置:如果其中一些工具认为传输的数据很危险,它们会断开连接。
【讨论】:
【参考方案6】:对我们来说,问题是 Apache 超时。更新大约需要 15 分钟,但 Apache 在 10 分钟后超时,导致我们的 SVN 服务器给出您看到的错误。最终的解决方案是增加 Apache 的超时设置。我们使用 VisualSVN 服务器 - 有关如何更改此设置的详细说明,请查看此处:http://adventuresindotnet.blogspot.com/2010/09/svn-trouble.html
【讨论】:
这也是我的问题的解决方案。我们的客户端是git svn,服务器是Windows 2008 R2下的Subversion Edge,解决方案是在csvn\data\conf\httpd.conf中添加“Timeout 1800”并重启Collabnet Apache服务。这个链接subversion.apache.org/faq.html#secure-connection-truncated也给出了线索。【参考方案7】:我更改为 Ubuntu 服务器,但我们遇到了同样的错误 - 跨多个客户端 PC、操作系统和客户端版本。
确保文件限制设置和 Apache 超时设置均符合建议后。
(见http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/)
我最终通过使用 apache2-mpm-prefork 包而不是 apache2-mpm-worker 包解决了这个问题。
【讨论】:
【参考方案8】:重命名文件夹并提交后,我在更新时收到同样的错误消息。我创建了一个新的工作目录,但没有收到错误。所以,我只是将我的更改移动到新的工作目录,提交并删除旧目录。
所以,这个错误似乎是由我的本地目录损坏引起的。
【讨论】:
【参考方案9】:VisualSVN 2.5.8:有同样的错误,接下来的步骤帮助我修复了这个错误:
在服务器上:
-
在服务器上删除有问题的文件夹;
重启 VisualSVN 服务器。
在工作站上:
-
更新父文件夹;
再次添加文件夹和文件;
添加到 SVN ;
提交。
【讨论】:
【参考方案10】:我也明白。我们的服务器是在 Windows 上运行的 Apache。我的客户端以高速连接,但延迟有点高(200 毫秒)。难题的另一部分是我正在运行 Windows Vista。启用自动缩放和 rss 似乎可以改善这种情况,但并不能解决问题。
【讨论】:
【参考方案11】:此错误消息还有另一个烦人的原因。它可能是您的路由器或路由器的固件。
我最近将 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 上的配置错误。这也可能是由于服务器速度慢或连接过载,或者可能是由于路由器便宜,就像我的情况一样。
【讨论】:
【参考方案12】:这显然有很多原因,但对我来说,这是通过重新启动我的 SVN 服务器 (VisualSVNServer 2.5.1) 解决的。在对新加载的转储执行完整的 repo 签出时,经常会发生这种情况。
【讨论】:
【参考方案13】:对我们来说,解决方法是将 SVN 客户端从 1.8降级到 1.7(与 TortoiseSVN 捆绑的命令行客户端)。
【讨论】:
以上是关于从 svn 存储库更新返回“无法读取块大小”错误的主要内容,如果未能解决你的问题,请参考以下文章