执行svn合并时出现“内存不足 - 终止应用程序”错误

时间:2011-03-14 17:44:25

标签: windows svn

尝试在32位Windows XP下使用Subversion 1.6.9执行命令行svn merge时,我们看到以下错误。

  

内存不足 - 终止应用程序。

     

此应用程序已请求Runtime以不寻常的方式终止它。   请联系应用程序的支持团队以获取更多信息。

此时检查Windows任务管理器会显示以下内存使用情况

Memory usage spike

svn.exe进程的峰值内存使用量超过1.8GB。

另外,在尝试使用TortoiseSVN执行合并时,我们得到相同的结果。

我们正尝试从存储库的根级别执行合并。存储库的总文件大小(在开发人员计算机上)大约为3GB。

这是我们第一次尝试根级合并。我们是否达到内部svn限制?

修改

经过一些反复试验后,我发现这个问题似乎是由我们存储库中的一个特定文件夹引起的。该文件夹包含1,500个SQL脚本。仅在此文件夹上执行合并会导致相同的内存不足错误(尽管需要更长的时间才会爆炸)。

3 个答案:

答案 0 :(得分:4)

我们能够解决这个问题,尽管我们仍然不了解原因的确切性质。

正如我在文章编辑中所述,我们将问题跟踪到包含大约1500个SQL脚本的单个文件夹。此文件夹还有一个svn:externals的单个文件。

我们执行了以下步骤:

  • 删除了此svn:externals并执行了svn commit
  • 删除了该文件夹的工作副本(似乎存在一个问题,即如果您删除引用单个文件的svn:externals属性,则该文件夹中的外部文件不会在后续{{ {1}})
  • 执行了svn update

当我们下次尝试svn update命令成功完成时。

答案 1 :(得分:2)

鉴于您在终止之前看到的内存使用量(~1.8GB)以及您在32位Windows上的事实,每个进程的内存限制为2GB,我建议尝试在64-上进行合并位机。

如果您没有可用的64位计算机,请尝试将其分解为较小的合并(除非您重新集成一个分支,然后我不确定您是如何拆分它的。)

我已经处理过3GB工作副本和大量合并(总是来自分支的根目录) - 我从来没有遇到内存问题,但我很长一段时间也是64位。可以想象,将分支与大量更改合并可能需要大量内存,但我只是在猜测。

我建议发布到subversion邮件列表,快速搜索告诉我你已经有:)我怀疑他们会确认你需要更多的内存来进行大型合并,考虑到存储库的大小,但它也可能是别的事情还在继续。

单独建议:在邮件列表中搜索类似问题。

我找到了thread about too many mergeinfo properties causing increased memory usage。如果您之前从未合并过root,我假设您有很多mergeinfos。

更新:了解svn:mergeinfos是很重要的。在没有一些理解的情况下去除它们时要小心。在Richard的情况下,存储库从未从分支的根目录提交合并,这意味着根目录下的svn:mergeinfo可能不包含任何内容,因此删除它们将删除svn对先前合并的知识。这在执行完全分支合并时很重要(例如,svn merge url / to / src / branch - 其中未指定修订),并且可能导致subversion尝试重新合并先前合并的修订。 Cherry-pick合并(即指定修订版x,y,z)不应受到影响。即使它全部被删除,它也不是世界末日,只是你会在整个分支合并之前有一个svn 1.4类似的行为,在那个时间点之前涉及分支。

那就是说,我不得不多次清理多余的子树mergeinfos - 只是不是从根目录。

Mergeinfo推荐阅读:

答案 2 :(得分:0)

您是否在64位Windows上运行64位版本的SubVersion?

如果没有,请记住Windows中对内存大小的限制。使用该过程限制为3GB,因此可能是您要达到的限制。

顺便说一句,最新的TortoiseSVN是1.6.13