JVM 标志 -XX:+UseDynamicNumberOfGCThreads -XX:+TraceDynamicGCThreads 已启用,看不到。 GC 期间的 GC 线程数。请解释一下输出日志?

2024-02-24

我们有一个以集群模式(6 个节点)运行 Wildfly 应用服务器的应用程序。 当触发 GC 时,我们有时会看到 JVM 冻结 16 秒。 应用程序对时间敏感,如果 15 秒内没有收到心跳响应,集群中的其他节点会认为该节点已死亡(其中 JVM 暂停)。 因此,JVM 冻结会导致应用程序不稳定。 为了了解 GC 期间发生的情况,我们启用了热点、安全点日志,并在 GC 暂停时查看以下跟踪。

谁能解释一下以下参数的含义。

1.) active_workers(): 13  
2.) new_acitve_workers: 13  
3.) prev_active_workers: 13
4.) active_workers_by_JT: 3556  
5.) active_workers_by_heap_size: 146

环境详情:Linux 64 位 RHEL 7 OpenJDK 1.8 堆大小:12GB(Young:4GB,Tenure:8GB) CPU核心:16个 VMware ESX 5.1

JVM 参数:

-XX:ThreadStackSize=512 
-Xmx12288m 
-XX:+UseParallelGC 
-XX:+UseParallelOldGC 
-XX:MaxPermSize=1024m 
-XX:+DisableExplicitGC 
-XX:NewSize=4096m 
-XX:MaxNewSize=4096m 
-XX:ReservedCodeCacheSize=256m 
-XX:+UseCodeCacheFlushing
-XX:+UseDynamicNumberOfGCThreads

对于调整这些 JVM 参数以减少 GC 暂停时间有什么建议吗?

GC logs:

GCTaskManager::calc_default_active_workers() : active_workers(): 13  new_acitve_workers: 13  prev_active_workers: 13
 active_workers_by_JT: 3556  active_workers_by_heap_size: 146
GCTaskManager::set_active_gang(): all_workers_active()  1  workers 13  active  13  ParallelGCThreads 13
JT: 1778  workers 13  active  13  idle 0  more 0
2016-10-06T07:38:47.281+0530: 48313.522: [Full GC (Ergonomics) DrainStacksCompactionTask::do_it which = 3 which_stack_index = 3/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 7 which_stack_index = 7/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 2 which_stack_index = 2/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 0 which_stack_index = 0/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 11 which_stack_index = 11/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 6 which_stack_index = 6/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 1 which_stack_index = 1/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 12 which_stack_index = 12/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 4 which_stack_index = 4/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 5 which_stack_index = 5/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 9 which_stack_index = 9/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 8 which_stack_index = 8/empty(0) use all workers 1
DrainStacksCompactionTask::do_it which = 10 which_stack_index = 10/empty(0) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 3 region_stack = 0x780be610  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 5 region_stack = 0x780be730  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 7 region_stack = 0x780be850  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 11 region_stack = 0x780bea90  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 1 region_stack = 0x780be4f0  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 10 region_stack = 0x780bea00  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 8 region_stack = 0x780be8e0  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 4 region_stack = 0x780be6a0  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 0 region_stack = 0x780be460  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 2 region_stack = 0x780be580  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 6 region_stack = 0x780be7c0  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 12 region_stack = 0x780beb20  empty (1) use all workers 1
StealRegionCompactionTask::do_it region_stack_index 9 region_stack = 0x780be970  empty (1) use all workers 1
[PSYoungGen: 63998K->0K(4082176K)] [ParOldGen: 8346270K->3657870K(8388608K)] 8410268K->3657870K(12470784K), [Metaspace: 465864K->465775K(1495040K)], 16.0898939 secs] 
[Times: user=180.57 sys=2.46, real=16.09 secs]
2016-10-06T07:39:03.373+0530: 48329.615: Total time for which application threads were stopped: 16.2510644 seconds, Stopping threads took: 0.0036805 seconds

安全点日志:

48313.363: ParallelGCFailedAllocation       [    2384          0              2    ]      [     0     0     3    35 16210    ]  0

在此先感谢您的帮助。


判断通过ParallelGCFailedAllocation and [PSYoungGen: 63998K->0K(4082176K)] [ParOldGen: 8346270K->3657870K(8388608K)] 8410268K->3657870K(12470784K), [Metaspace: 465864K->465775K(1495040K)], 16.0898939 secs]我们有以下条件:

  1. YoungGen 几乎空了(4G 中仅占用了 63М)
  2. OldGen 几乎已满(8,3G 只剩下 42М)
  3. JVM 尝试从 YoungGen 中移动幸存对象,或者在 Survivor 空间中分配它们失败,并决定将它们移动到 OldGen
  4. OldGen 的空间也不足(如前所述,只有 42M),因此触发了 FullGC
  5. Full GC 后收集了 5G 的 OxyGen (8346270K->3657870K)

即使是并行运行的 13 个 GC 线程也会在 16 秒内收集这些 5G。由于只有 16 个核心,因此通过添加更多线程来提高速度的空间不大。

这里可能会发生以下情况:

  • 对于 YoungGen 来说,您的物体寿命太长,因此您需要切换到 CMS/G1,这样它将更频繁地收集 OldGen,并且总共花费的时间更少。你需要调整InitiatingHeapOccupancyPercent根据您的需要。根据当前输出判断,您应该在 4G 左右启动。不过,如果您真的需要这 12G 堆,就会产生疑问,因为它会受到堆碎片问题的影响。
  • 您的对象寿命很短,但太大而无法容纳在幸存者空间中,因此你需要调整SurvivorRatio参数使其变大。像 SurvivorRatio=4 这样的东西(在这种情况下它会变成 1G)。

所以这实际上取决于您的对象分配模式。最好的方法是在将其应用于生产之前在其他地方进行尝试。

JVM GC 参数可以在这里找到 http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 标志 -XX:+UseDynamicNumberOfGCThreads -XX:+TraceDynamicGCThreads 已启用,看不到。 GC 期间的 GC 线程数。请解释一下输出日志? 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 如何使用 Spring JPA 对 jsonb 列进行查询?

    我正在使用 Spring JPA 和 PostgreSQL 数据库 我有一个实体如下 Entity TypeDef name json binary typeClass com vladmihalcea hibernate type jso
  • 更改 Kivy 中按钮的背景颜色

    我是 Kivy 的新手 在指定按钮的背景颜色时遇到困难 这是我的简单例子 custombutton py from kivy app import App from kivy uix widget import Widget class M
  • 获取 .Net 中 CryptoStream 的长度

    我正在开发加密 解密文件的软件 我希望能够猜测加密后数据的长度 但我无法使用 CryptoStream Length 它会抛出 NotSupportedException 有什么办法可以猜出来吗 我正在使用 RijndaelManaged
  • 带有尾部斜杠的奇怪 Nginx 行为

    我有一个非常有趣的行为 我想避免在我的网站上的 URL 中出现尾随斜杠 我已经把rewrite 1 permanent 规则进入我的服务器块 所以 https example com something https example com
  • C# 命名管道流 readline 挂起

    我很困惑 我有命名管道的客户端 服务器结构 问题出在某个随机点 经过一段时间的工作后 它只是挂在streamReader ReadLine 上 它只是停下来 不再继续 我很困惑 我根本不知道发生了什么 也不知道如何调试它 为什么以及何时发生
  • 使用VBA将字符串分成Excel中的不同单元格

    例如 我有一个名为 str 的字符串变量 该 str 的值为 apple orange pineapple 每个单词由一个新的 VbLine 分隔 我想把它移到细胞上 A1 包含apple A2 包含orange并且A3包含pineappl
  • asp.net mvc Html.ActionLink() 保留我不想要的路由值

    我认为有以下 ActionLink 它创建以下 URLhttp mywebsite com Controller Action http mywebsite com Controller Action 假设我在末尾添加一个 ID 如下所示
  • 安全地发布网站构建后的最佳方法是什么?

    那么 根据您的经验 最好的方法是什么 是否有一种安全的方法可以在构建自动化工具中编写脚本 触发 编辑 我应该提到这是 windows net 我将部署到 iis6 对于我使用的一些项目卡皮斯特拉诺 http www capify org 推
  • iPhone SDK:自定义视频播放器控件

    在我的 iPhone 应用程序中 我设计了一个自定义视频播放器 目前它非常基本 只有一个播放暂停和停止按钮 但我希望用户能够像使用苹果原始媒体播放器一样擦除视频 我认为这是正确的词 例如 如果您明白我的意思 我希望能够使用 UISlider
  • 删除数据框中不常见的行

    假设我有一个非常简单的数据框 a lt rep 5 30 b lt rep 4 80 d lt rep 7 55 df lt data frame Column c a b d 最会是什么generic删除所有出现次数少于 60 次的行的方
  • 如何在 Qt 中的小部件下绘制阴影?

    我想知道如何在 Qt 中的小部件 不是主小部件 例如标签 下绘制阴影 我需要使用样式表还是需要对其进行编码 用 C 假设您有一个表单和一个标签 想要从中投射阴影 您可以使用QGraphics 阴影效果 http qt project org
  • 在 LINQ 2 SQL 中不先选择数据就进行更新?

    如何在不先在 LINQ 中选择数据的情况下更新记录 由于您必须首先执行 linq select 显然会调用成本高昂的 SQL SELECT 因此更改所需的属性 然后执行 SubmitChanges 我希望避免这种情况 只执行 SQL UPD
  • Hibernate 全局“动态插入”

    有没有办法设置dynamic insertHibernate 全局属性 因此它将是所有实体的默认值 在 NHibernate 中是 foreach var clazz in config ClassMappings clazz Dynami
  • 在 WSL2 上运行的 Jupyter 实验室网络错误

    我在 WSL2 Ubuntu 上运行 Jupyter Lab 并在 Win10 PC 上的 Firefox 中访问它 它们在同一台机器上运行 因此不应该涉及 网络 我正在运行它jupyter lab no browser 服务器在终端中启动
  • 传递函数作为参数?

    这是我的事件 正如您所看到的 我想发送一个以它作为参数的函数 onclick deleteItems image size function GetImageSize 删除函数在js文件中 在我的 js 文件中 我想调用 GetImageS
  • 各组最新值的总和

    对于我的每一行数据 我想计算最近的总和value对于每个group dt data table group c a b a a b a value c 10 5 20 15 15 10 desired c 10 15 25 20 30 25
  • >>'运算符[重复]' aria-label='Java中无符号右移'>>>'运算符[重复]'> Java中无符号右移'>>>'运算符[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 1 gt gt gt 32 1 https stackoverflow com questions 4813909 why is 1 32 1 无符号右移运算符在最左边插入 0 所以当我这样做
  • Android 中的后台服务被杀死

    我们开发了一个 Android 应用程序 其中涉及后台服务 为了实现这个后台服务 我们使用了IntentService 我们希望应用程序每隔一段时间轮询一次服务器60 seconds 所以在IntentService 在 while 循环中
  • 你能为Python中导入的模块定义别名吗?

    在Python中 是否可以为导入的模块定义别名 例如 import a ridiculously long module name 所以它有一个别名 short name import a ridiculously long module
  • JVM 标志 -XX:+UseDynamicNumberOfGCThreads -XX:+TraceDynamicGCThreads 已启用,看不到。 GC 期间的 GC 线程数。请解释一下输出日志?

    我们有一个以集群模式 6 个节点 运行 Wildfly 应用服务器的应用程序 当触发 GC 时 我们有时会看到 JVM 冻结 16 秒 应用程序对时间敏感 如果 15 秒内没有收到心跳响应 集群中的其他节点会认为该节点已死亡 其中 JVM