Subgit "Out of Memory" 和 "GC Overhead Limit Exceeded"

Subgit "Out of Memory" and "GC Overhead Limit Exceeded"

我是 运行 一个从 svngit 的转换项目。由于应用程序是单线程的,我正在将项目转移到更快的 PC 上。

所以没有任何选项栏httpSpooling = true;它在 VM 上运行正常 – 4 CPU's, 20 Gb of Ram.

两个单独实例的 RAM 使用量为 8GB,达到最大值 9.8Gb

作业暂停、压缩和 SCP'd 到新机器 – Deb9 的裸机构建(与 VM 相同)i7(8 CPUs(有效))16GB 内存。

但是当只启动一个 SubGit 实例时;我得到 Java out of memoryGC Overhead Limit Exceeded。 我尝试将以下排列添加到 repo.git/subgit/config[daemon]

javaOptions = -noverify -client -Djava.awt.headless=true -Xmx8g -XX:+UseParallelGC -XX:-UseGCOverheadLimit – This gives GC Overhead Limit Exceeded Error
#javaOptions = -noverify -client -Djava.awt.headless=true -Xmx8g -XX:+UseParallelGC -XX:-UseGCOverheadLimit – (OPS Disabled) Gives an out of memory error.
javaOptions = -noverify -client -Djava.awt.headless=true –Xmx12g -XX:-UseGCOverheadLimit – this gives out of memory errors.

我也尝试过其他设置,包括将 –client 更改为 –server,但这似乎是双向转换,这不是我想要做的事情。

根据应用程序在系统上的使用情况应该有足够的 RAM 运行 成功,所以除非 SubGit 忽略了一些值,否则我无法判断。

[daemon] 部分中的 'javaOptions' 可能确实会被忽略,具体取决于您 运行 的操作:那些 java 选项影响 SubGit 守护进程,但不影响 'subgit install' 或 'subgit fetch' 操作。由于您已经提到存储库已移动到另一台机器,我相信您已经调用了这两个命令中的任何一个来重新启动镜像,这就是 'daemon.javaOptions' 被忽略的原因。要调整 SubGit 的 java 选项,请在 SubGit 启动脚本(EXTRA_JVM_ARGUMENTS 行)中对其进行编辑:

EXTRA_JVM_ARGUMENTS="-Dsun.io.useCanonCaches=false -Djava.awt.headless=true -Djna.nosys=true -Dsvnkit.http.methods=Digest,Basic,NTLM,Negotiate -Xmx512m"

至于内存消耗本身,这取决于正在进行的操作运行。目前尚不完全清楚您是如何暂停虚拟机上的作业(通过 'subgit shutdown' 或其他方式?),当时哪些操作 运行ning(初始翻译或常规提取)以及如何暂停您在新机器上重新启动作业。