java jmx promth_JAVA JMX协议监控

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 map = new HashMap<>();

@Override

public List threadRuntime(String url) {

if(logger.isDebugEnabled())

logger.debug("url:"+url);

String jmxURL = "service:jmx:rmi:///jndi/rmi://"+url+"/jmxrmi";

List 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 getJvmRuntimeModelList(ThreadInfo[] threadInfos){

if(threadInfos!=null)

return null;

List list = new ArrayList(threadInfos.length);

for(int i=0;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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值