Linux HotSopt虚拟机GC线程的CPU占用率

标签: Web开发 GC JVM | 发表时间:2014-04-17 00:00 | 作者:赖 信涛
出处:http://www.importnew.com

下面的问题将会检验你有关Linux系统上的Java程序的垃圾回收和High CPU排错的知识。在过度调用GC或及CPU占用率过高的时候,这种排错技术是至关重要的。假设你没有使用像是 Compuware dynaTrace或者JVisualVMware这样先进的监视工具。有关于这些工具的使用教程将会在以后发布,但是请先确保自己掌握了基础的排错原则。

问题:

在Linux系统运行的时候,怎样可以监视并计算每一个Oracle HotSpot或者JRockit JVM垃圾回收(GC)线程占用了多少CPU资源呢?

答案

在Linux系统上,Java线程是作为本地的线程来实现的,这就导致每一个线程都是一个单独的Linux进程。这就意味着,你要使用 top-H命令(线程开关视图)来监视HotSpot JVM产生的所有Java进程的CPU占用率。

也就是说,根据你正在使用的GC策略和服务器规范的不同,HotSpot和JRockit JVM会为每一个GC线程分配一个确定的序号来区分收集空间的新旧。通过产生的JVM线程库,这些线程可以很轻松地被识别。你可以参考下面这个范例,Oracle JRockit JVM用“(GC Worker Thread X)”的标记方式产生了四个线程。

===== FULL THREAD DUMP ===============

Fri Nov 16 19:58:36 2012

BEA 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

………………………

现在让我们通过这个简单的例子来了解一下这些规则。

第一步——监视GC线程的CPU利用率

第一步是监视和测定:

  • 通过Linux系统的 top-h command命令的显示结果,来找出每一个GC工作线程的本地线程ID。
  • 确定每一个GC工作线程的CPU占用率。

第二步——生成并分析JVM线程池

使用Linux的top -H命令的同时,通过kill -3 命令生成2或3个 JVM Thread Dump

  • 打开JVM线程池,找到JVM GC工作线程。
  • 然后,通过本地线程的ID(tid属性)找出“top -H”输出的数据和JVM Thread Dump中的数据的关系。

就像你在这个例子中看到的那样,通过这样的线程分析,我们可以发现GC工作线程总共占用了大约20%的CPU资源。这主要是因为在那个时候发生了major GC。请注意使用verbose:gc参数是非常有用的,因为它可以让你分析CPU使用峰值与minor GC以及major GC的关系,以及让你确定JVM GC进程占用了多少CPU资源。

相关文章

相关 [linux hotsopt 虚拟机] 推荐:

Linux HotSopt虚拟机GC线程的CPU占用率

- - ImportNew
下面的问题将会检验你有关Linux系统上的Java程序的垃圾回收和High CPU排错的知识. 在过度调用GC或及CPU占用率过高的时候,这种排错技术是至关重要的. 假设你没有使用像是 Compuware dynaTrace或者JVisualVMware这样先进的监视工具. 有关于这些工具的使用教程将会在以后发布,但是请先确保自己掌握了基础的排错原则.

在VMware vSphere Client下使用Linux虚拟机安装CentOS6.4系统

- - CSDN博客推荐文章
序言:公司要准备虚拟化,将配置比较高的物理机虚拟化成 N 个虚拟机,以便可以给更多的应用服务提供服务. 1,使用vShere client连接到物理机上面,选择“配置”--“存储器”—“数据存储”,右键点击选择“浏览数据存储”,就可以上传文件,如下图所示:. 2,将需要安装的centos.iso文件上传上去.

linux实用技巧:使用快照制作虚拟机

- - CSDN博客系统运维推荐文章
    在日常的学习当中,如果遇到了集群和负载均衡类的实验,需要用到大量的虚拟机,如果一个一个的去创建,显然是非常费力和低效的. 所以今天交给大家如何用快照来制作虚拟机.     制作虚拟机的快照分为以下几个步骤:.     1.首先我们要创建存储的逻辑卷来生成模板和快照文件;.     2.制作被快照的模板;.

Java虚拟机家族考

- ReadReply - 博客园新闻频道
  说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun[1] HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了.   从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.

Python 虚拟机实现(一)

- xcv58 - python.cn(jobs, news)
python并不将py文件编译为机器码来运行,而是由python虚拟机一条条地将py語句解释运行,这也是为什么被称为解释语言的原因之一. 但python虚拟机并不直接执行py語句,它执行编译py語句后生成的字节码. 本篇简单地讲下编译、运行的过程,涉及到的内容有如何编译、控制流、函数及类的实现等. python将py文件编译成为PyCodeObject,再将这个对象写入某文件就成为了pyc文件,文件中包含python的magic number(来说明编译时使用的python版本号)、源文件的mtime(使pyc和py文件保持同步)、编译出的code对象.

Xen 虚拟机架构

- - 博客园_知识库
  Xen 是一个基于开源软件组织的虚拟机监控器(即 Virtual Machine Monitor 简称 VMM),可以允许在单一的物理机器上同时运行多个操作系统实例.   虚拟计算机的概念最早由 IBM 公司在上世纪六七十年代提出,并将其运用于 VM/370 系统中以共享昂贵的大型机系统(Main Frame).

虚拟机三种协议

- - 操作系统 - ITeye博客
如何使虚拟机与主机互相能ping通 刚刚因为虚拟机与主机没法互相ping通的事情,奋战到将近凌晨一点. 现在把这个过程总结一下,以方便后加入该行业的广大IT精英. VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式). 1.       bridged(桥接模式).

Colinux,不是虚拟机,胜似虚拟机

- wq - C++博客-首页原创精华区
排版走样了,点击下载Doc/pdf版本. 我似乎已经更喜欢使用word写东西,感觉更正式,缺点是发布为web版本时格式乱糟糟的. Colinux,不是虚拟机,胜似虚拟机 一些使用记录 潘孙友 2010.12.25 于遵义. 目录 一、Colinux长什么样. Colinux的格言是:如果Linux 可以运行在任何一种体系架构(i386,PowerPC,...).

SEO利器-Google GSA虚拟机版本

- Class4 - 车东[Blog^2]
在所有的SEO工具中,能够被称为利器的工具不多,但Google GSA虚拟机版本绝对算是一个. 去年我介绍了《利用Google Search Appliance 服务器做SEO 》,不过这个正式版实在太昂贵而且根据美国的某条法律不销售给中国,所以很多人都没办法用来做SEO应用. 而Google GSA虚拟机版本就很好的解决了这个问题.

文章: Java虚拟机家族考

- Haides - InfoQ中文站
说起Java虚拟机,许多Java程序员都会潜意识地把它与Sun HotSpot虚拟机等同看待,也许还有一些程序员会注意到BEA JRockit和IBM J9,但大多数人对JVM的认识都仅限于此了. 从1996年初Sun发布的JDK 1.0中所包含的Sun Classic VM算起,Java虚拟机已经发展了15个年头,沧海桑田一瞬间,15年转眼而过,这期间曾经涌现、湮灭过许多或经典或优秀或有特色的虚拟机实现,在《Java虚拟机专栏》的第1篇中,我们先暂且把代码与技术放下,一起来回顾一下Java虚拟机家族的发展轨迹和历史变迁.