- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 JEE 应用程序最近开始出现 CPU 使用率峰值(例如 40 核服务器上 27 个内核的 100%)并且应用程序不可用的时间越来越长。这与以下帖子中描述的问题非常相似,包括弹跳应用程序服务器会使问题消失,直到它在几个小时后再次出现:
Old Gen heap is full and the Eden and Survivor are low and almost empty
当应用程序遇到这些“卡住”时,我获取了一些核心转储输出,并且我看到了以下 JVM GC 输出:
PSYoungGen total 11221504K, used 2435K
eden space 9238528K, 0% used
from space 19829796K, 0% used
to space 1970176K, 0% used
ParOldGen total 39613440K, used 39276477K
object space 39613440K, 99% used
PSPermGen total 254976K, used 115497K
object space 254976K, 45% used
根据引用的帖子和上面的输出,我想我明白“卡住”是由在 ParOldGen 空间上运行(徒劳?)的垃圾收集器驱动的。我缺少的部分:
为什么 PermGen 空间的使用率保持在 45%。也就是说,ParOldGen 中约 39GB 的内容最终会过渡到 PSPermGen 中吗?
几乎为空的 PSYoungGen 空间有什么意义?这是否意味着应用程序不会在稳定状态下创建任何/许多新对象实例?
上面的帖子还描述了“为 ParOldGen 提供更多余量”的选项,但我不清楚这是否意味着通过 -Xmx 增加总堆大小,或者是否有明确的 JVM GC 参数。我看到 NewRatio
参数控制新生代相对于老年代的大小。 PSYoungGen 本质上是空的这一事实是否意味着它太大,我应该使用较小的 NewRatio
值?
在此先感谢您的帮助。
最佳答案
will the ~39GB of stuff in ParOldGen ultimately transition into PSPermGen?
Java 7 中的 PermGen(在 Java 8 中被元空间取代)用于保存代码。从堆传递到 PermGen 的唯一东西是字节码,所以除非你正在生成或加载类,否则没有任何东西从一个传递到另一个。它们是不同的空间。
What is the significance of the nearly empty PSYoungGen space?
Full GC 后年轻代为空。一旦您的老一代开始填满,Full GC 就很常见。
Does this mean that the application isn't creating any/many new object instances at steady state?
这更有可能意味着它最近进行了 Full GC。
describes the option of "giving more headroom" to ParOldGen, but I'm not clear if that means increasing the total heap size via -Xmx or if there's an explicit JVM GC parameter.
增加最大堆可以给你更多的空间,但我会先检查一下
Would the fact that the PSYoungGen is essentially empty mean that it's too large, and that I should use a smaller NewRatio value?
这可以帮助您为老一代提供更多空间,但它可能只会在内存耗尽之前给您更多时间。
关于java - JVM YoungGen 0%, Perm Gen 99%, OldGen Full,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231379/
我在看 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 可以在一个句子中搜索单词。例如,我们有下一个文本: Вася молодец, съел огурец, т.к. проголодался. Такие дела. 如果我搜索 мол
我是一名优秀的程序员,十分优秀!