博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring boot 实际应用(一) 内置tomcat 实现JMX配置
阅读量:6912 次
发布时间:2019-06-27

本文共 2304 字,大约阅读时间需要 7 分钟。

概述

因为项目需要增加JMX 监控,SO翻了翻官方文档,有几种实现方式,下面说一个我选择的,一是方便扩展,二是方便我底层封装

说起JMX大家肯定都不陌生,JMX的出现让开发自检测程序出现可能,其提供了大量检测线程 、GC、内存的方式,从而提高了 Java 语言自己的管理监测能力。可以帮助我们定位以下问题: OOM 内存泄露 线程死锁 锁争用(Lock Contention) Java 进程消耗 CPU 过高

实际应用

目前我们可以使用JDK自带的JConsole、VisualVm等,有兴趣可自己查下,在实际服务器部署的时候为了方便提供JMX监控,我们选择自己开启(当然port这种必须要运维来监管的),以下就是在spring boot下使用内置tomat开启的方式之一,直接上代码。

package com.ecej.nove.autoconfigure.jmx;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.DependsOn;import org.springframework.jmx.support.ConnectorServerFactoryBean;import org.springframework.remoting.rmi.RmiRegistryFactoryBean;/** * JMX监控 * * @author QIANG * */@Configurationpublic class JmxAutoConfiguration {    private Logger LOGGER = LoggerFactory.getLogger(JmxAutoConfiguration.class);    @Value("${jmx.rmi.host:localhost}")    private String rmiHost;    @Value("${jmx.rmi.port:9999}")    private Integer rmiPort;    @Bean    public RmiRegistryFactoryBean rmiRegistry() {        final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();        rmiRegistryFactoryBean.setPort(rmiPort);        rmiRegistryFactoryBean.setAlwaysCreate(true);        LOGGER.info("RmiRegistryFactoryBean create success !!");        return rmiRegistryFactoryBean;    }    @Bean    @DependsOn("rmiRegistry")    public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {        final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();        connectorServerFactoryBean.setObjectName("connector:name=rmi");        connectorServerFactoryBean.setServiceUrl(                String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));        LOGGER.info("ConnectorServerFactoryBean create success !!");        return connectorServerFactoryBean;    }}复制代码

如此的简单

后记

最近发现,对于线上应用出现TimeOut 、链接异常、服务请求过慢等问题时,基础开发人员貌似没有解决问题的思路。其实应该马上导出ThreadDump,因为从这就可以分析出太多道道了。链接JMX监控查看内存、cpu等状态信息,不能拍脑袋在那傻猜啊。所以这也是为什么这个月主导开发服务链监控的原因了。为了使基础开发能够学会定位解决应用出现的问题,准备忙完写一个根据ThreadDump进行分析的详细案例。

关注公众号,将获得最新文章推送

转载于:https://juejin.im/post/5d07259ce51d45775b419bd9

你可能感兴趣的文章
BZOJ 2818GCD
查看>>
提交包到iTunes Connect时构建版本“正在处理”后直接消失的问题
查看>>
我的友情链接
查看>>
QQ空间技术架构之深刻揭密
查看>>
nfs常见问题解决方法
查看>>
centOS 6 安装mongoDB
查看>>
Java基础学习总结(10)——static关键字
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
Linux实用工具
查看>>
JDBC Statement 实例- 查询结果集
查看>>
Java消息服务JMS详解
查看>>
Grin交易原理详解
查看>>
磁盘分区以及挂接挂载
查看>>
大数据体系【概念认知】系列-2:存储以及副本策略
查看>>
Android Hacks:同时启动多个Intent
查看>>
简明的数据库设计模式
查看>>
我的友情链接
查看>>
linux企业常用服务---haproxy+nginx搭建web高可用集群
查看>>
win7 断开 共享连接的操作方法
查看>>
CTSSD服务无法正常启动:Failure 4 in trying to open SV key PROCL-4/PROCL-5 clsctss_r_av2
查看>>