- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们有一个相当大的应用程序在 JBoss 7 应用服务器上运行。过去,我们使用 ParallelGC,但它在一些堆很大(5 GB 或更多)并且通常几乎填满的服务器中给我们带来了麻烦,我们会经常遇到很长的 GC 暂停。
最近,我们改进了应用程序的内存使用,并在少数情况下为应用程序运行的一些服务器增加了更多 RAM,但我们也开始切换到 G1,希望减少这些暂停的频率和/或更短。事情似乎有所改善,但我们看到了以前没有发生过的奇怪行为(使用 ParallelGC):Perm Gen 似乎很快填满,一旦达到最大值就会触发 Full GC,这通常会导致长时间的暂停在应用程序线程中(在某些情况下,超过 1 分钟)。
几个月来,我们一直在使用 512 MB 的最大 perm 大小,在我们的分析期间,perm 大小通常会在 ParallelGC 的 390 MB 左右停止增长。然而,在我们切换到 G1 之后,上面的行为开始发生。我尝试将最大 perm 大小增加到 1 GB 甚至 1.5 GB,但仍然会发生 Full GC(只是频率较低)。
在 this link您可以看到我们正在使用的分析工具(YourKit Java Profiler)的一些屏幕截图。注意当 Full GC 被触发时,Eden 和 Old Gen 有很多可用空间,但 Perm 大小是最大的。在 Full GC 之后 Perm 大小和加载类的数量急剧减少,但它们又开始上升并重复循环。代码缓存很好,永远不会超过 38 MB(在这种情况下是 35 MB)。
这是GC日志的一部分:
2013-11-28T11:15:57.774-0300: 64445.415: [Full GC 2126M->670M(5120M), 23.6325510 secs] [Eden: 4096.0K(234.0M)->0.0B(256.0M) Survivors: 22.0M->0.0B Heap: 2126.1M(5120.0M)->670.6M(5120.0M)] [Times: user=10.16 sys=0.59, real=23.64 secs]
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
-Xms5g -Xmx5g -Xss256k -XX:PermSize=1500M -XX:MaxPermSize=1500M -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -Xloggc:gc.log
最佳答案
Perm Gen 增长的原因
-XX:+UseConcMarkSweepGC
,尝试通过添加
-XX:+CMSClassUnloadingEnabled
来启用类卸载和永久生成集合。 .
-Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
standalone.xml
中。 .您将获得每个 JVM 选项及其设置的列表。注意:它必须在您要查看的 JVM 中才能使用它。如果您在外部运行它,您将看不到运行 JBoss 的 JVM 中发生了什么。
set "JAVA_OPTS= -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal %JAVA_OPTS%"
-XX:+PrintcommandLineFlags
jmap -permstat JBOSS_PID >& permstat.out
-XX:SurvivorRatio=8
– 将幸存者空间比例设置为 1:8,从而产生更大的幸存者空间(比例越小,空间越大)。 SurvivorRatio 是伊甸园空间与一个幸存者空间相比的大小。更大的幸存者空间允许短命对象在年轻代中死亡更长的时间。 -XX:TargetSurvivorRatio=90
– 允许 90% 的幸存者空间被占用,而不是默认的 50%,从而更好地利用幸存者空间内存。 -XX:MaxTenuringThreshold=31
– 防止从年轻代过早提升到年老代。允许生命周期较短的对象在年轻代中死亡更长的时间(因此避免升级)。此设置的结果是,由于要复制的额外对象,次要 GC 时间可能会增加。可能需要调整此值和幸存者空间大小,以平衡幸存者空间之间复制的开销与将长期存在的长期对象。 CMS 的默认设置是 SurvivorRatio=1024 和 MaxTenuringThreshold=0,这会导致所有清理的幸存者都被提升。这会给收集年老代的单个并发线程带来很大压力。注意:与 -XX:+UseBiasedLocking 一起使用时,此设置应为 15。-XX:NewSize=768m
– 允许指定初始年轻代大小 -XX:MaxNewSize=768m
– 允许指定最大年轻代大小 关于java - G1 垃圾收集器 : Perm Gen fills up indefinitely until a Full GC is performed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274317/
我在看 this post在 GitHub 中,但我无法理解 OP 的含义: “全表达式”暗示是一种表达式,但有时又不是。 我的解释是“完整表达式”(标准中使用的术语)可能不是表达式。 [intro.
我正在研究数字图像处理。当我尝试加载更高分辨率的图像时,我遇到了很多 OOM 问题。 我正在将这些启动参数与应用程序一起使用 -Xms10240m -Xmx10240m -XX:NewRatio=3
我为我的 java 应用程序配置了以下参数 -Xmx = 46g,-Xms = 46g,NewSize = 2g。 我们没有为 permgen 配置大小,但在 JCONSOLE 中它显示最大 perm
我正在尝试构建以下布局: +-----------------------------------+ | | +----------
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我已经多次看到这个问题被问到,但是当我尝试实现他们的解决方案时,它似乎不起作用。 我目前开始使用外部样式表涉足 HTML 和 CSS。 我创建了一个包含以下内容的容器(边框只是为了帮助我了解容器):
假设您有一个 (1) Intel/AMD x86-64 位 2 GHz 8 核处理器。 8 个内核中的每一个是否都以完整的 2 GHz 运行,或者每个内核是否以完整的 2 GHz 时钟的一部分运行(例
我想使用 RavenDb 4.0.0-beta-40018 查询一个包含动态属性的实体,但我不确定如何去做。 class Foo { public int Id { get; set; }
我的全文搜索索引有问题。我有一个字符字段大小为 30 的表。我在这个字段上创建了一个全文搜索索引,以便在这个不区分大小写的字段上进行快速搜索操作。现在,当我执行以下查询时:SELECT fieldna
如果我有一个 64 长度的 java 数组 i[],除了循环整个数组之外,是否有一种快速方法可以找出该数组中的每个位置是否“已满”?我正在编写一个黑白棋 AI,我需要知道整个数组是否已满。 最佳答案
stackoverflow 上有很多关于如何正确执行分页的问题,对于 Oracle,最流行的答案是这样的: select * from ( select row_.*, rownum rown
我有套接字应用程序,其代码片段如下。我已确保套接字在finally block 中关闭。我猜我昨天或前天刚刚进行了一次 Full GC。然后我通过jmap比较这次FGC之前和今天FGC之后的套接字实例
这里是我的 gc.log 的摘录: 2013-02-28T12:02:13.209+0100: 1486457.849: [GC 1486457.850: [ParNew 3483368K->9683
我有一个在一个 tomcat 实例上运行的 Java webapp。在高峰时段,Web 应用程序每秒提供大约 30 个页面,通常约为 15 个页面。 我的环境是: O/S: SUSE Linux En
我有一个包含一个日期时间列的表。我只需要返回最近 6 个月的行。这可以通过 WHERE CloseTime >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m
如何获取 SVN 存储库的完整副本并将其导入到另一台服务器上? 最佳答案 您想要执行 svnadmin 转储。您可以通过 svnadmin help dump 或 reading the docs 获
当我使用 Wikipedia API 执行全文搜索时,我无法将搜索范围缩小到仅标题 (srwhat=title)。 所以在任何地方搜索时(默认) http://en.wikipedia.org/w/a
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我想在数十亿个字符串中进行一般的子字符串搜索。该要求与一般全文搜索略有不同,因为我希望查询“ubst”也可以点击“substr”。 Lucene 或 Sphinx 是否能够做到这一点?如果没有,您认为
Sphinx 可以在一个句子中搜索单词。例如,我们有下一个文本: Вася молодец, съел огурец, т.к. проголодался. Такие дела. 如果我搜索 мол
我是一名优秀的程序员,十分优秀!