hotspot线程模型

以下问题将测试您对Linux操作系统上运行的Java应用程序的垃圾收集和高CPU故障排除的知识。 当调查过多的GC和/或CPU利用率时,此故障排除技术尤其重要。 它将假定您无权使用高级监控工具,例如Compuware dynaTrace甚至JVisualVM。 将来将介绍使用此类工具的未来教程,但请确保您首先掌握基本的故障排除原理。

题:

在Linux OS上,如何在运行时监视和计算每个Oracle HotSpot或JRockit JVM垃圾回收(GC)线程使用了多少CPU%?

回答:

在Linux OS上,Java线程被实现为本机线程,这导致每个线程是一个单独的Linux进程。 这意味着您可以使用top -H 命令 (“线程”切换视图)监视HotSpot JVM创建的任何Java线程的CPU%。

也就是说,根据您使用的GC策略和服务器规范,HotSpot&JRockit JVM将创建一定数量的GC线程,这些线程将执行旧空间和旧空间的收集。 通过生成JVM线程转储,可以轻松识别此类线程。 如下面的示例所示,Oracle JRockit JVM确实创建了4个GC线程,标识为“(GC Worker Thread X)”。

===== FULL THREAD DUMP ===============Fri Nov 16 19:58:36 2012BEA JRockit(R) R27.5.0-110-94909-1.5.0_14-20080204-1558-linux-ia32"Main Thread" id=1 idx=0x4 tid=14911 prio=5 alive, in native, waiting-- Waiting for notification on: weblogic/t3/srvr/T3Srvr@0xfd0a4b0[fat lock]at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)at java/lang/Object.wait(J)V(Native Method)at java/lang/Object.wait(Object.java:474)at weblogic/t3/srvr/T3Srvr.waitForDeath(T3Srvr.java:730)^-- Lock released while waiting: weblogic/t3/srvr/T3Srvr@0xfd0a4b0[fat lock]
at weblogic/t3/srvr/T3Srvr.run(T3Srvr.java:380)
at weblogic/Server.main(Server.java:67)at jrockit/vm/RNI.c2java(IIIII)V(Native Method)-- end of trace"(Signal Handler)" id=2 idx=0x8 tid=14920 prio=5 alive, in native, daemon"(GC Main Thread)" id=3 idx=0xc tid=14921 prio=5 alive, in native, native_waiting, daemon"(GC Worker Thread 1)" id=? idx=0x10 tid=14922 prio=5 alive, in native, daemon"(GC Worker Thread 2)" id=? idx=0x14 tid=14923 prio=5 alive, in native, daemon"(GC Worker Thread 3)" id=? idx=0x18 tid=14924 prio=5 alive, in native, daemon"(GC Worker Thread 4)" id=? idx=0x1c tid=14925 prio=5 alive, in native, daemon………………………

现在,让我们通过一个简单的示例将所有这些原理放在一起。

步骤#1 –监视GC线程CPU利用率

调查的第一步是监视并确定:

  • 标识通过Linux top -H 命令显示的每个GC工作线程的本机线程ID。
  • 确定每个GC工作线程的CPU%。

步骤#2 –生成和分析JVM线程转储

在Linux的顶部-H的同时 ,产生2个或3 JVM线程转储通过kill快照-3 <JavaPID>。

  • 打开JVM线程转储,然后找到JVM GC工作线程。
  • 现在,通过查看本机线程ID(tid属性),将“ top -H”输出数据与JVM Thread Dump数据相关联。

正如您在我们的示例中看到的那样,这种分析确实使我们能够确定我们所有的GC工作线程都使用了大约20%的CPU。 这是由于当时发生了重大收藏。 请注意,启用verbose:gc也是非常有用的,因为它将允许您将此类CPU峰值与次要和主要集合相关联,并确定JVM GC进程对服务器总体CPU利用率的贡献程度。

参考:来自Java EE支持模式博客上的JCG合作伙伴 Pierre-Hugues Charbonneau的Linux上的HotSpot GC线程CPU占用空间 。

翻译自: https://www.javacodegeeks.com/2013/04/hotspot-gc-thread-cpu-footprint-on-linux.html

hotspot线程模型

hotspot线程模型_Linux上的HotSpot GC线程CPU占用空间相关推荐

  1. java 线程模型_Java基础篇之Java线程模型

    Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程.实际上,Java使用线程来使整个环境异步.这有利于通过防止CPU循环的浪费来减少无效部分. 为更好的理解多线程环境的优势可以将它与它 ...

  2. 地鼠宝宝的轶事奇闻之线程模型

    Golang并发机制 线程模型 在操作系统提供的内核线程之上,go搭建了一个两级线程模型.毫无疑问,其中一级必然是内核线程,另一级便是goroutine.你可以将goroutine看作是应用程序线程. ...

  3. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践

    服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...

  4. Netty和RPC框架线程模型分析

    <Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析Netty和RPC框架线程模型.李林锋已在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的同学可 ...

  5. reactor线程模型_简单了解Java Netty Reactor三种线程模型

    1. Reactor三种线程模型 1.1. 单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接 ...

  6. Netty 和 RPC 框架线程模型分析

    https://www.infoq.cn/article/9Ib3hbKSgQaALj02-90y 1. 背景 1.1 线程模型的重要性 对于 RPC 框架而言,影响其性能指标的主要有三个要素: I/ ...

  7. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 "线程实现"建立在&qu ...

  8. [转]COM线程模型-套间

    [转]COM线程模型-套间 COM线程模型-套间 来源: http://blog.csdn.net/crybird/archive/2008/10/11/3057067.aspx 查找了好多资料,终于 ...

  9. netty worker线程数量_Dubbo线程模型

    Dubbo中线程池的应用还是比较广泛的,按照consumer端到provider的RPC的方向来看,consumer端的应用业务线程到netty线程.consuemr端dubbo业务线程池,到prov ...

最新文章

  1. codevs 4560 NOIP2015 D2T2 子串
  2. H3C——路由策略和策略路由实例配置
  3. Failed to start firewalld.service: Unit firewalld.service is masked.
  4. 计算机开机自启文件夹,电脑开机自动打开文件夹解决方法
  5. 7649:我家的门牌号
  6. php的计划任务定时执行
  7. java架构说明书_JDBC 使用说明(流程、架构、编程)
  8. 半导体芯片产业链公司大全
  9. mysql交叉编译 cmake_cmake交叉编译参数toolchain
  10. 【Excel】两组行数不同数据做二维柱状图
  11. 跑分软件测试原理,只会比高低?教你三分钟看懂安兔兔跑分
  12. python提取excel一列或多列数据另存为新表(1)
  13. C语言明显优于其它高级语言
  14. 方舟建立服务器显示cmd,家庭电脑建方舟服务器
  15. scratch教程----5.特效的制作
  16. 为什么CAD输入文字时文字特别大但输入后就消失了?
  17. 最大似然估计(MLE),最大后验概率估计(MAP),贝叶斯估计入门讲解
  18. 你想知道的2022年广东PMP考试报名时间来咯!
  19. VB内嵌matlab simulink仿真
  20. 第十一章:实现SpringBoot单个、多个文件的上传

热门文章

  1. Spark SQL(六)之加载数据的参数配置
  2. Java多线程:线程安全和非线程安全的集合对象
  3. 20 个使用 Java CompletableFuture的例子
  4. Spring入门(二)之下载与安装
  5. 详细整理分层开发步骤!
  6. 循环录入某学生 5 门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
  7. shell文本处理工具grep
  8. encipher.min.php,陌屿授权系统(5.7)最新版 网站授权 - 下载 - 搜珍网
  9. java阿里数据库连接池_Java学习:数据库连接池技术
  10. HDU1231(DP)