java - 子代码 "Out of Memory"和 "GC Overhead Limit Exceeded"

标签 java bash git svn subgit

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

所以没有任何选项栏httpSpooling = true;它在 VM 上运行正常 - 4 个 CPU20 Gb RAM

两个独立实例的 RAM 使用量为 8GB,最高可达 9.8Gb

作业已暂停、压缩并 SCP 到新机器 - Deb9 的裸机版本(与 VM 相同)i7(8 个 CPU(有效))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”或其他方式?)、当时正在运行哪些操作(初始翻译或常规提取)以及如何重新启动虚拟机上的作业新机器。

关于java - 子代码 "Out of Memory"和 "GC Overhead Limit Exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004703/

相关文章:

bash - Docker 检查数据库是否正在运行

ios - 如何组织Android NDK/iOS项目

git - 'git bisect skip'在TortoiseGit中怎么办?

java - 无论如何,是否可以通过任何api获取java中solr conf文件夹的位置。

java - 实现 Java gui slider 时出现运行时错误

java - 从 XML 获取自定义 TextView 的自定义属性

linux - 在 sudo 下自动执行 bash 命令不起作用

linux - 如何为 `cd` 以及 `ls` 之后的目录内容编写一个 bash 别名?

git - 如何永久取消跟踪 git 中的存储库已跟踪的文件?

java - 获取 JavaHg 中变更集对象的标签列表?