- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试收集有关我们偶尔遇到的问题的信息,在运行几周后,应用程序变慢,工作正常,变慢,工作正常,缓慢和正常工作之间的间隔越来越短,更短。我的理论是,随着时间的推移,我们会更频繁地收集垃圾。另一个关键信息是我们偶尔会遇到 OOM PermGen 问题。
我启用了 verbose:gc,现在可以在 catalina.out 中看到 GC 输出。然而,我认为我需要添加 PrintGCDetails 标志,基于此处的信息:
http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
启用后一个标志将打印出有关“Tenured”内存收集的信息。问题是,是导致 PermGen 错误的内存,还是有什么不同?如果不同,我如何记录显示 PermGen 空间的信息?
编辑——不幸的是,我无法在此环境中附加任何 jvm 监控工具。
编辑——我添加了上述配置选项,以及一个用于打印终身分配的选项,我得到类似的东西
27.701: [GC 27.701: [ParNew
Desired survivor size 2162688 bytes, new threshold 4 (max 4)
- age 1: 1906560 bytes, 1906560 total
- age 2: 2064 bytes, 1908624 total
- age 3: 5064 bytes, 1913688 total
- age 4: 650368 bytes, 2564056 total
: 35684K->2678K(38336K), 0.0068580 secs] 224179K->191173K(1065664K), 0.0069700 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
ParNew generation 是 permgen 空间吗?
和
(concurrent mode failure): 25387K->31940K(1027328K), 0.2983200 secs] 50714K->31940K(1065664K), [CMS Perm : 35273K->35139K(35392K)], 0.2985210 secs] [Times: user=0.30 sys=0.00, real=0.30 secs]
(concurrent mode failure): 25356K->31941K(1027328K), 0.3032690 secs] 50861K->31941K(1065664K), [CMS Perm : 35264K->35129K(35392K)], 0.3034800 secs] [Times: user=0.30 sys=0.00, real=0.31 secs]
失败困扰着我。
提前致谢
最佳答案
Tenured 和 PermGen 不一样,不是。它们是相关的,但不是一回事。确切的细节取决于您正在使用的 JVM 中的实现,但是,从您链接的文档中:
“与永久代密切相关的第三代是永久代。永久代是特殊的,因为它保存虚拟机所需的数据来描述在 Java 语言级别不具有等效性的对象。例如,描述类和方法的对象存储在永久代中。”
Interned 字符串和类详细信息等通常存储在 PERM 中,而长期存在的 Java 对象是 TENURED。
这是一篇解释 PermGen(以及如何调整它)的不错的文章:http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation
关于Java: 'tenured'内存和permgen一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336759/
我知道标志 -XX: PretenureSizeThreshold 可用于设置限制 YG 中的分配大小。 除此之外,是否还有其他场景/条件可以从权属空间中为新对象分配空间? 如果新对象大小大于 ede
我一直在研究 Java 垃圾收集器的参数,随着 eden/survivor 空间填满,我看到昂贵且频繁的次要垃圾收集。这是因为我分配了一个非常大的对象池。我知道这些对象是“永久的”,因为它们会被重用但
REST APP(仅从 MongoDB 检索数据并以 JSON 格式返回)在 GC 日志中显示,启动后几分钟内保留阈值降至 1。 据我了解,这意味着对象在第一次小型 GC 后被提升到老一代(不会进入幸
我创建了一个测试 Java 程序来帮助了解 G1GC 的工作原理。 我的程序有两个线程 - 一个线程加载一个包含大约 200MB 对象(仅 1000 个字符串)的大型 ArrayList,然后删除一个
我试图了解 Java GC 的工作原理。假设由于分配请求,Eden 空间已满。发生 Minor GC,将所有 Eden 和 Survival1 对象收集到 Survival2 中。但在《生存2》中,物
到目前为止我知道: 对象分配在 eden 空间 中,如果它们在次要集合中幸存下来,它们将被提升到 幸存者空间 之一 对于进一步的次要集合,在次要集合中幸存下来的对象将在两个幸存者空间之间交换。在此期间
-XX:+PrintTenuringDistribution VM 选项应强制 VM 在幸存者空间中打印对象年龄,如 VMOptions page 中所述. 但是,当我设置此选项时,我只会看到为每个
我们的应用程序需要非常大的内存,因为它处理非常大的数据。因此,我们将最大堆大小增加到 12GB (-Xmx)。 以下是环境详情 OS - Linux 2.6.18-164.11.1.el5 JB
我对 Heap、Young、Tenured 和 Perm 一代感到困惑。 谁能解释一下? 最佳答案 Java 垃圾收集器被称为通用垃圾收集器。应用程序中的对象存在不同的时间长度,具体取决于它们的创建位
有什么办法可以让 Eden 空间按比例大于 Tenured 空间吗?有 NewRatio 但它以相反的方式工作(Tenured 比 Eden 大几倍)。 我知道有 -XX:NewSize= 和 -XX
我有一个 Hotspot JVM 堆转储,我试图找出某个对象是否存在于保有空间、伊甸园空间或幸存者空间中,但我做不到。 如果有人能帮助我,我将不胜感激。 最佳答案 我认为你做不到。来自 this 论坛
我试图了解 Java 中的 GC 是如何工作的,我想知道在以下情况下会发生什么: Eden:几乎已满,Surivor1:利用率极低,Surivor2:空,Tenured:几乎已满。 我们尝试分配一些对
运行一个非常简单的代码来尝试查看垃圾收集器的功能。 String a = null; while ( true ) { a = new String(" no... "); } 我正在使用 Par
我是一名优秀的程序员,十分优秀!