通过jmx访问jvm知道的Mbean的一些信息,可以取得系统运行时的一些情况,
比如说,内存(堆内存大小,非堆内存大小),还有各个区的内存大小。
还可以访问gc收集器的gc次数。来确定minorGC和fullGc的次数都可以获得。
一:获得堆内存和非堆内存的大小。
public String monitorMemory() {
StringBuilder sb = new StringBuilder("Memory:");
MemoryMXBean mmbean = ManagementFactory.getMemoryMXBean();
MemoryUsage hmu = mmbean.getHeapMemoryUsage();
sb.append("[HeapMemoryUsage:");
sb.append(" Used=" + formatBytes(hmu.getUsed()));
sb.append(" Committed=" + formatBytes(hmu.getCommitted()));
sb.append("]");
MemoryUsage nhmu = mmbean.getNonHeapMemoryUsage();
sb.append("[NonHeapMemoryUsage:");
sb.append(" Used=" + formatBytes(nhmu.getUsed()));
sb.append(" Committed=" + formatBytes(nhmu.getCommitted()));
sb.append("]");
return sb.toString();
}
在我的测试代码下,jdk1.6下 -server 的测试运行结果摘要为:
写道
Memory:[HeapMemoryUsage: Used=656K Committed=6016K][NonHeapMemoryUsage: Used=3414K Committed=6400K]
二:获得内存分区间的大小。
public String monitorMemoryPool() {
StringBuilder sb = new StringBuilder("MemoryPool:");
List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean p : pools) {
sb.append("[" + p.getName() + ":");
MemoryUsage u = p.getUsage();
sb.append(" Used=" + formatBytes(u.getUsed()));
sb.append(" Committed=" + formatBytes(u.getCommitted()));
sb.append("]");
}
return sb.toString();
}
这个的输出,跟平添相关性很大,并且跟启动的jvm参数也有关系,我这里是用-server的模式启动,-client的话读者可以试试,会多一些东西。
在我的测试输出为:
写道
MemoryPool:[Code Cache: Used=354K Committed=2304K][PS Eden Space: Used=410K Committed=768K][PS Survivor Space: Used=0K Committed=128K][PS Old Gen: Used=246K Committed=5120K][PS Perm Gen: Used=3060K Committed=4096K]
看的还是很清楚的。
三:gc收集器的gc次数。
public String monitorGC() {
StringBuilder sb = new StringBuilder("GC:");
List<GarbageCollectorMXBean> gcmbeans = ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gc : gcmbeans) {
sb.append("[" + gc.getName() + ": ");
sb.append("Count=" + gc.getCollectionCount());
sb.append(" GCTime=" + formatMillis(gc.getCollectionTime()));
sb.append("]");
}
return sb.toString();
}
在我的机器测试输出为:
写道
GC:[PS Scavenge: Count=29 GCTime=0.0460sec][PS MarkSweep: Count=7 GCTime=0.1220sec]
这是运行过一段时间够的结果,minorGC和full gc对应的gc方式分别对应上面的2个名字。
因此可以看到,minorGC29次,FULL GC 7次。
关于这个可以进一步查看 RednaxelaFX 的 通过Java/JMX得到full GC次数?
四:结果。
既然能够在运行中动态得到这些数据,那就可以用来进行一些简单的系统监控,启动一个线程,每隔2分钟采一次样,然后进行分析记录。
通过剩余内存的大小,一段时间内FULL GC 的次数来进行相应的预警,还是比较简单,有效的。
我这使用的测试代码,每隔5秒钟打印一次信息。
public static void main(String[] args) {
System.out.println("beging monitor");
new Thread(new Runnable() {
public void run() {
JmxMonitorUtil monitor = new JmxMonitorUtil();
while (true) {
System.out.println("------------------------");
System.out.println(monitor.monitorMemory());
System.out.println(monitor.monitorMemoryPool());
System.out.println(monitor.monitorGC());
System.out.println("------------------------");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
分享到:
相关推荐
Zabbix通过JMX方式监控java中间件 Zabbix2.0添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”;它是用java写的一个程序。 工作原理: zabbix_server想知道一台主机上的特定的JMX值时,它向...
Hbase和Hadoop JMX监控实战
activeMQ开启jmx固定rmi端口,穿透防火墙,用了一天的时间,踩了无数的坑,拿出来共享.
JMX(Java Management Extensions)是SUN创建的一套规范。BEA WebLogic Server实现了JMX大部分的API,并且提供了一个完全兼容JMX的控制台来管理各种资源。OPEN SOURCE的应用服务器JBoss也是基于JMX来实现。并且对之评价...
java项目,自己做的项目利用jmx监控weblogic,tomcat,websphere源码
Java版 jmx 监控weblogic 生成html
使用JMX实现对远程服务器端的信息监控:包括CPU,内存,加载类,堆信息等数据
Zabbix通过JMX监控java中间件.docx
jmx 监控 tomcat 的设置方法,实现
通过jmx可以监控vm内存使用,系统内存使用等 ,特点是通过window和linux命令获得CPU使用率。
TongWeb常见问题处理,用于运维的问题处理,便于解决应用部署时遇到的各种问题...
使用jconsole远程监控tomcat jmx 实验操作详细信息,本人实验实操
7.Coherence企业级缓存(六) JMX 管理和监控.pdf
catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...
指标的实时监控在网络流量、系统开销、对新设备的监控等方面存在很多问题,JMX技术是解决这些问题的有效方法。因此提出了一种利用JMX技术来改进网络管理系统中实时监控管理的一个实现模型。此模型有效地解决了实时...
java jmx 远程监控
云服务上的tomcat监控使用到的jar包,需要的可以直接下载,注意tomcat的版本需要和jar包的版本对应
分析了当前网络监控中面临的主要问题,提出了采用JMX方案来解决的办法。介绍了JMX的技术特点,并采用该技术实现了IP网络管理中的网络监控任务的调配和管理。
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
jboss jmx监控 通过jmx监控jboss应用所必须的jar文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~