JMX协议监控,可通过JMX协议远程监控,实时监控线上jvm情况,并通过平台管理界面进行

展示,可以通过监控实时获得线上服务器运行情况。

  可以监控内存、实时线程、共享内存等各种信息。

  获取实时线程信息并显示:

import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by liubaofeng on 2017/3/10.
* 根据jmx配置
* 将线程信息返回
*/
public class JvmRuntimeServiceImpl implements JvmRuntimeService {
protected static final Logger logger = LoggerFactory.getLogger("file_logger");
private Map<String,MBeanServerConnection> map = new HashMap<>();

@Override
public List<JvmRuntimeModel> threadRuntime(String url) {
if(logger.isDebugEnabled())
logger.debug("url:"+url);
String jmxURL = "service:jmx:rmi:///jndi/rmi://"+url+"/jmxrmi";
List<JvmRuntimeModel> resultList = null;
if(!map.containsKey(jmxURL)) {
MBeanServerConnection mBeanServerConnection = null;
try {
mBeanServerConnection = connection(jmxURL);
} catch (IOException e) {
if (logger.isErrorEnabled())
logger.error(e.getMessage(), e);
}
map.put(jmxURL,mBeanServerConnection);
try {
ThreadInfo[] threadInfos = thread(mBeanServerConnection);
resultList = getJvmRuntimeModelList(threadInfos);
} catch (IOException e) {
if (logger.isErrorEnabled())
logger.error(e.getMessage(), e);
}
}else{
MBeanServerConnection mBeanServerConnection = map.get(jmxURL);
try {
ThreadInfo[] threadInfos = thread(mBeanServerConnection);
resultList = getJvmRuntimeModelList(threadInfos);
} catch (IOException e) {
if (logger.isErrorEnabled())
logger.error(e.getMessage(), e);
}
}
return resultList;
}

/**
* 建立jmx连接
* @param jmxURL
* @return
* @throws IOException
*/
private MBeanServerConnection connection(String jmxURL)throws IOException{
JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, null);
MBeanServerConnection mBeanServerConnection = connector.getMBeanServerConnection();
return mBeanServerConnection;
}

/**
* 取threadinfo信息.
* @param mBeanServerConnection
* @throws IOException
*/
private ThreadInfo[] thread(MBeanServerConnection mBeanServerConnection) throws IOException {
ThreadMXBean threadMXBean = ManagementFactory
.newPlatformMXBeanProxy(mBeanServerConnection,
ManagementFactory.THREAD_MXBEAN_NAME,
ThreadMXBean.class);
long[] ids = threadMXBean.getAllThreadIds();
ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(ids);
return threadInfos;
}

/**
* 取jvm运行时信息.
* @param threadInfos
* @return
*/
private List<JvmRuntimeModel> getJvmRuntimeModelList(ThreadInfo[] threadInfos){
if(threadInfos!=null)
return null;

List<JvmRuntimeModel> list = new ArrayList<JvmRuntimeModel>(threadInfos.length);
for(int i=0;i<threadInfos.length;i++){
ThreadInfo threadInfo = threadInfos[i];
String threadName = threadInfo.getThreadName();
Thread.State threadState = threadInfo.getThreadState();
JvmRuntimeModel jvmRuntimeModel = new JvmRuntimeModel();
jvmRuntimeModel.id = i;
jvmRuntimeModel.name = threadName;
jvmRuntimeModel.state = getState(threadState);
list.add(jvmRuntimeModel);
}

return list;
}

/**
* 获得状态.
* @param state
* @return
*/
private String getState(Thread.State state){
if(state.equals(Thread.State.NEW))
return "新建";
else if(state.equals(Thread.State.RUNNABLE))
return "执行中";
else if(state.equals(Thread.State.BLOCKED))
return "阻塞";
else if(state.equals(Thread.State.WAITING))
return "等待";
else if(state.equals(Thread.State.TIMED_WAITING))
return "定时等待";
else
return "终止";
}

}

  

  相关连接

  http://www.iteye.com/topic/1117196

https://www.ibm.com/developerworks/cn/java/j-rtm1/  

    http://1985wanggang.blog.163.com/blog/static/7763833201258112117110/

http://www.blogjava.net/japper/archive/2012/09/05/387092.html

  http://www.aichengxu.com/xitong/944435.htm

http://www.programcreek.com/java-api-examples/index.php?class=javax.management.MBeanServerConnection&method=queryMBeans

  http://www.voidcn.com/blog/xuechongyang/article/p-1837832.html

JAVA JMX协议监控的更多相关文章

  1. 利用JMX来监控大部分java应用

    JMX(JavaManagement Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系结构和网络传输协议,灵活 ...

  2. Zabbix通过JMX方式监控java中间件

    Zabbix2.0添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”:它是用java写的一个程序. 工作原理: zabbix_server想知道一台主机上的特定 ...

  3. Java JMX 监管

    Java JMX 监管 JSR 规范系列目录(https://www.cnblogs.com/binarylei/p/10348178.html) JMX(Java Management Extens ...

  4. Java 服务端监控方案(四. Java 篇)

    http://jerrypeng.me/2014/08/08/server-side-java-monitoring-java/ 这个漫长的系列文章今天要迎来最后一篇了,也是真正与 Java 有关的部 ...

  5. Java 中的监控与管理原理概述

    点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 程序猿阿朗博客 已经收录,有很多知识点和系列文章. 当前 ...

  6. jvm添加jmx远程监控

    调JVM监控的时候需要远程连接机器,所以服务器需要开放JMX协议,配置如下. 现在我的项目是jboot-jfinal项目,用的是undertow容器,在启动脚本里面加入 JAVA_OPTS=" ...

  7. 基于 JVMTI 实现 Java 线程的监控(转)

    随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争, ...

  8. 干货 | 云智慧透视宝Java代码性能监控实现原理

    这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...

  9. 用JMX远程监控Tomcat

    要通过JMX远程监控Tomcat,首先需要进行Tomcat的JMX远程配置. 注意:此配置添加在catalina.bat文件开头的注释行(rem)后面即可. 不需鉴权的配置: 先修改Tomcat的启动 ...

随机推荐

  1. 「Vue」vue cli3项目打包为APP方法及坑点

    1.执行npm run build之后生成dist文件夹 2.打开HBuilderX新建一个APP项目 3.把dist文件夹里的所有文件拷贝替换到APP文件夹下 4.打开manifest.json文件 ...

  2. Tomcat权威指南-读书摘要系列9

    从源代码组建Tomcat 安装Apache Ant ant是make的开放源代码的替代品,而且是专门为java程序语言设计. Ant的最初用途是作为Tomcat的组建工具: 之后,Ant成为Java软 ...

  3. Oracle之xml的增删改查操作

    工作之余,总结一下xml操作的一些方法和心得! tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数 ...

  4. bzoj千题计划239:bzoj4069: [Apio2015]巴厘岛的雕塑

    http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为 ...

  5. 从数据库存储,文件结构谈到B树,散列

    昨天俱乐部内部办了一个讲座,关于常规数据库系统实现,听了之后有点混乱,于是花了很多时间特地查了一些资料,基本上自己感觉自己是明白了.特地写下来. 文章开头说明三点, 第一点,本文针对常规数据库,是为了 ...

  6. HTML5 JavaScript实现图片文字识别与提取

    8月底的时候,@阿里巴巴 推出了一款名为“拯救斯诺克”的闯关游戏,作为前端校园招聘的热身,做的相当不错,让我非常喜欢.后来又传出了一条消息,阿里推出了A-star(阿里星)计划,入职阿里的技术培训生, ...

  7. JavaScript 计时

    http://www.w3school.com.cn/js/js_timing.asp JavaScript 计时事件 通过使用 JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码 ...

  8. Value = undefined

    Value = undefined Javascript在计算机程序中,经常会声明无值的变量.未使用值来声明的变量,其值实际上是 undefined. 在执行过以下语句后,变量 carname 的值将 ...

  9. 使用Sysmon和Splunk探测网络环境中横向渗透

    当前很难在网络中探测攻击者横向渗透,其中原因有很难获取必要的日志和区别正常与恶意行为.本篇文章介绍通过部署Sysmon并将日志发送到SIEM来探测横向渗透. 工具: Sysmon + Splunk l ...

  10. mysql学习------二进制日志管理

    MySQL二进制日志(Binary Log)   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库( ...