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 线程数。请解释一下输出日志? 的相关文章

  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • firestore快照监听器生命周期和定价之间有什么关系?

    在我的活动中 我有一个字符串列表 这些字符串表示我想要附加快照侦听器的 Firestore 文档 我使用 Acivity ModelView 存储库结构 在活动的 onCreate 中 我向 ViewModelProvider 询问适当的
  • 无法从后台服务通过 WiFi 访问互联网

    我将直接介绍我发现的一些事实 数据 如果您遇到 解决了类似的问题 请帮助我 我每 5 分钟向服务器发送一次数据 除非用户在服务器的帮助下手动将其关闭 wakeful broadcast receiver通过一个intent service
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 您能让 Tomcat 6 stdout.log 文件表现得像 log4j DailyRollingFileAppender 吗?

    我们使用的是 Tomcat 6 的 Windows 安装 默认情况下 我们应用程序的 log4j 输出将转到 catalina base logs stdout log 文件 该日志文件仅在我们重新启动 Tomcat 时滚动 并且文件名始终
  • 快速 log2(float x) 实现 C++

    我需要在 C 中非常快速地实现 log2 float x 函数 我发现了一个非常有趣的实现 而且速度非常快 include
  • Java G1 GC 处理引用对象运行缓慢

    我已经在 J ava 上运行了计数器 它24小时工作 每秒点击通过100次左右 白天 GC 处理时间从 20 60 毫秒缓慢上升到 10000 60000 毫秒 然后下降到 20 60 毫秒 这种模式不时地重复 从 GC 日志中我发现 GC
  • Java String.format 向整数添加空格

    我有一小段代码 我不明白输出 此输出向我的字符串格式文本添加空格 我做错了什么吗 public class HelloWorld public static void main String args int a1 540 int a2 4
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • @TestPropertySource 不适用于 Spring 1.2.6 中使用 AnnotationConfigContextLoader 的 JUnit 测试

    似乎我在 Spring 4 1 17 中使用 Spring Boot 1 2 6 RELEASE 所做的任何事情都不起作用 我只想访问应用程序属性并在必要时通过测试覆盖它们 无需使用 hack 手动注入 PropertySource 这不行
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • java中的比较器链

    正在阅读Oracle 关于接口的 Java 教程 https docs oracle com javase tutorial java IandI createinterface html其中给出了一个例子Card 打牌 我试图理解接口中的
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • 如何缓存 ASP.NET 网站以获得更好的性能

    我是一名网页设计师 通常设计不需要更新的企业网站 所以我想将输出缓存一天 我怎样才能做到这一点 此外 任何有关在慢速服务器上提高 ASP NET 性能的建议都被接受 请注意 ASP NET 缓存有一个bug http connect mic

随机推荐

  • 如何使用 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