我在 Windows Server 2003 R2(企业版,x86)上安装了 CollabNet Subversion Server 1.6.2.37639,显然将其设置为作为服务运行。我只托管一个存储库,即同步另一个镜像(托管在另一台机器上)。该服务运行良好,但运行几天后,它会无缘无故地占用超过 200MB 的 RAM。此外,存储库的流量非常小。没有记录任何故障,并且似乎没有内存泄漏,因为内存消耗从未超过该数字。
该存储库的大小约为 194MB,提交/签出次数大约为每天 10 次。
似乎有相当多的“浪费”内存可以分配用于数据库缓存等。
有谁知道更多关于这个问题的信息以及如何解决它?我猜这可能是某种形式的数据缓存执行文件,但我在互联网上没有找到有关这方面的线索。
答案1
只想问您几个问题……
- 你的 Subversion 存储库有多大?
- 每小时、每天、每周有多少次提交、签出和更新?
- 另一台机器能处理多少流量?
我并不是 Windows 方面的专家,但这听起来确实像某种缓存或者您的存储库非常大,因此有效操作它所需的索引被归类为“块状”:)有没有办法,就像使用 Linux 一样,查看每个进程的内存分配/使用方式,也许通过任务管理器或资源监视器?
编辑:这实际上应该是对你的问题的评论,但评论似乎完全弄乱所有格式,我真的想要问题的项目符号。:-)
答案2
您可能想确定达到这种内存使用水平究竟需要多长时间。这仅仅是时间问题,还是您可以通过执行更多提交或进行更多签出等来加速该过程。内存泄漏很少见,但有可能发生,并且通常会导致性能问题。这些问题将在不同配置的不同点上表现出来。存储库达到 200MB 后会变慢吗?
在大多数情况下,内存并没有被“浪费”。操作系统的工作是管理整体的内存分配,但有些应用程序可能有自己的策略。在这种情况下,SVN 可能有一个缓存,但它也可能分配更多的内存,以便它是一个连续的内存分配。通常,操作系统应该看到内存压力并使用一系列启发式方法来确保其他应用程序继续正常运行。
我会尝试的事情:
- 使用性能监视器(perfmon.exe)捕获有关内存使用情况等的各种统计数据。
- 查看每个存储库的日志以了解发生了哪些类型的操作。
- 重新启动服务并使用自动脚本运行大量签出、提交等。在尝试混合这两种类型的操作之前,请单独执行这些操作。如果您只有另一个 Subversion 服务器的纯副本,则这可能不太适用。
答案3
这很有趣 - 我在邮件列表中没有听说过 Svnserve 内存占用很大,也许你想知道发帖至此。