常量 GC activity
Constant GC activity
在处理 java 8 应用程序的性能后,JMS 消费者线程的数量增加了,这增加了并行处理,其中大部分是对数据库的并行请求。应用程序开始使用更多内存。它被赋予了更多的记忆,但副作用开始出现。在高负载下输入消息 2-3 批后(生产率提高很多)垃圾收集开始密集使用 CPU。由于应用程序的性质、文本消息处理、新(巨大)文本变量的密集创建以及然后在流程结束时进行垃圾收集,它之前并不小。但它清楚地看到它在某个时间点变得巨大并且应用程序无法摆脱这种状态。
在上图中,它发生在 18:58。注意内存图,没有顺序 'picks of memory' 用法,它一直在垃圾收集,因此是 CPU 图片。我以前在应用程序内存不足时看到过这种情况,并且在 OOE 之前几分钟您通常可以看到完全相同的图片。它被赋予了另一个 GB 的内存,但图片没有改变,请注意最大使用量约为 5000 MB,但在这个 JVM 释放了一半 GB 之后,这意味着它不需要它。但是它的行为就像缺少内存一样。
值得一提的是,同一台机器上启动的多个 JVM 相互协作。另一个 'big one' 正在做初步处理并且工作正常,具有相似的体系结构但内存消耗更少。
您可以注意到此应用的所有三个批次 'memory picks',同时 运行。
我四处搜索,发现它可能是 Meta Space,这可能会导致额外的 GC 触发和不稳定的应用程序行为,所以我故意将最大 Meta Space 大小增加到应用程序的某个更大的值通常取,注意最大值并在下面使用
问题:这是怎么回事,持续 GC 的原因可能是什么 activity,我该如何解决?
jvisualvm 显示所有可用内存,但不显示每个 space。 jconsole 显示此刻 GC 变得恒定 'Old Gen' 池变满,同时 'Eden Space' 和 'Survival Space' 可能是空的。这解释了当我们有空闲 space(专用于其他代)时持续 GC activity 的情况。
使用后 G1 GC 问题消失了,应用程序似乎开始使用更少的内存,内存图片看起来更小(由于不同的算法?)
新 java 8 选项 -XX:+UseStringDeduplication
减少了此文本处理应用程序的内存使用量,但这略有不同。
在处理 java 8 应用程序的性能后,JMS 消费者线程的数量增加了,这增加了并行处理,其中大部分是对数据库的并行请求。应用程序开始使用更多内存。它被赋予了更多的记忆,但副作用开始出现。在高负载下输入消息 2-3 批后(生产率提高很多)垃圾收集开始密集使用 CPU。由于应用程序的性质、文本消息处理、新(巨大)文本变量的密集创建以及然后在流程结束时进行垃圾收集,它之前并不小。但它清楚地看到它在某个时间点变得巨大并且应用程序无法摆脱这种状态。
在上图中,它发生在 18:58。注意内存图,没有顺序 'picks of memory' 用法,它一直在垃圾收集,因此是 CPU 图片。我以前在应用程序内存不足时看到过这种情况,并且在 OOE 之前几分钟您通常可以看到完全相同的图片。它被赋予了另一个 GB 的内存,但图片没有改变,请注意最大使用量约为 5000 MB,但在这个 JVM 释放了一半 GB 之后,这意味着它不需要它。但是它的行为就像缺少内存一样。
值得一提的是,同一台机器上启动的多个 JVM 相互协作。另一个 'big one' 正在做初步处理并且工作正常,具有相似的体系结构但内存消耗更少。
您可以注意到此应用的所有三个批次 'memory picks',同时 运行。
我四处搜索,发现它可能是 Meta Space,这可能会导致额外的 GC 触发和不稳定的应用程序行为,所以我故意将最大 Meta Space 大小增加到应用程序的某个更大的值通常取,注意最大值并在下面使用
问题:这是怎么回事,持续 GC 的原因可能是什么 activity,我该如何解决?
jvisualvm 显示所有可用内存,但不显示每个 space。 jconsole 显示此刻 GC 变得恒定 'Old Gen' 池变满,同时 'Eden Space' 和 'Survival Space' 可能是空的。这解释了当我们有空闲 space(专用于其他代)时持续 GC activity 的情况。
使用后 G1 GC 问题消失了,应用程序似乎开始使用更少的内存,内存图片看起来更小(由于不同的算法?)
新 java 8 选项 -XX:+UseStringDeduplication
减少了此文本处理应用程序的内存使用量,但这略有不同。