快速获取java中的内存和线程信息(MBean)

    在排查线上问题的时候,我们经常使用jstat、jstack、jmap查看GC、内存、线程的信息,但是有时候我们需要获取一个整体的信息来帮助我们快速定位,类似linux中自带的top命令,简单而全面的系统信息,在网上找了些资料,发现之前有人写了个jtop的工具,能够全面获取java应用的信息,一看作者,原来是阿里的同事,原理是使用了java中的MBean,借这个机会,把MBean的东西简单了解一下。

 

    首先这个工具如何使用:wget https://hatter-source-code.googlecode.com/svn/trunk/jtop/jtop.jar

Usage:

java -jar jtop.jar [options]<pid>[<interval>[<count>]]
-OR-
java -cp jtop.jar jtop [options]<pid>[<interval>[<count>]]
    -size <B|K|M|G|H>             Size,case insensitive (default: B, H for human)
    -thread <N>                   ThreadTop N (default:5)
    -stack <N>                    StacktraceTop N (default:8)
    -excludes                     Excludes(string.contains)
    -includes                     Includes(string.contains, excludes than includes)
    --color                       Display color (default: off)
    --sortmem                     Sortby memory allocted (default: off)
    --summaryoff                  Donot display summary (default: off) 

(1)直接运行jtop.jar获取的信息(sudo -u admin  /java -jar jtop.jar pid   内存、线程、GC、高CPU占用线程的栈信息)

如果想把大小的信息,换算成M或者其他,可以用另外一种方式

sudo -u admin  java -cp  jtop.jar  jtop -size M  PID

(2)查看占用CPU前三的线程栈信息(sudo -u admin java -cp jtop.jar jtop -thread 3 -stack 50 --summaryoff  PID)

 

(1)一些概念

A、MBean

通常是一个java类,它提供接口可以使这个类具有管理功能(如standard MBean,接口中定义的方法使MBean具有管理功能)。

B、MBean server

是管理MBean的一个java类,你需要向MBean server注册一个MBean后,这个MBean才会具有管理功能,MBean server还提供了查询功能和注册监听器的功能,sun提供的只是接口,不同的jmx实现中的MBean server实现也不同。

Mbean有四种常见类型:A、standard MBean;B、dynamic MBean;C、open MBean;D、model MBean

重点介绍一个standard MBean 和dynamic Mbean

standard MBean:这种类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。它的命名也必须遵循一定的规范,例如我们的MBean为Hello,则接口必须为HelloMBean。

dynamic MBean:必须实现javax.management.DynamicMBean接口,所有的属性,方法都在运行时定义

(2)根据JDK提供的MBean获取信息

1、工厂类获取各个MBean:ManagementFactory

2、内存信息MBean:MemoryMXBean

3、线程信息MBean:ThreadMXBean,可以重点关注dumpAllThreads,把所有的线程信息down下来,然后自己进行运算

4、gc情况信息MBean:GarbageCollectorMXBean

ManagementFactory.getGarbageCollectorMXBeans()获取的是gcMbean的数组

5、类加载Mbean:ClassLoadingMXBean

​​   ​

http://docs.huihoo.com/java/jmx/jmx.html

 

 

 

你可能感兴趣的:(Mbean)