当前位置: 代码网 > 服务器>服务器>Tomcat > 使用JMX监控Tomcat示例代码

使用JMX监控Tomcat示例代码

2024年05月18日 Tomcat 我要评论
示例代码string jmxurl = "service:jmx:rmi:///jndi/rmi://192.168.10.93:8999/jmxrmi";jmxserviceurl serviceu

示例代码

string jmxurl = "service:jmx:rmi:///jndi/rmi://192.168.10.93:8999/jmxrmi";
jmxserviceurl serviceurl = new jmxserviceurl(jmxurl);

map map = new hashmap();
// 用户名密码,在jmxremote.password文件中查看
string[] credentials = new string[] { "monitorrole", "tomcat" };
map.put("jmx.remote.credentials", credentials);
jmxconnector connector = jmxconnectorfactory.connect(serviceurl, map);
mbeanserverconnection mbsc = connector.getmbeanserverconnection();

// 端口最好是动态取得
objectname threadobjname = new objectname("catalina:type=threadpool,name=http-8080");
mbeaninfo mbinfo = mbsc.getmbeaninfo(threadobjname);

// tomcat的线程数对应的属性值
string attrname = "currentthreadcount";
mbeanattributeinfo[] mbattributes = mbinfo.getattributes();
system.out.println("currentthreadcount:" + mbsc.getattribute(threadobjname, attrname));

完整的示例代码文件

import java.lang.management.memoryusage;
import java.text.simpledateformat;
import java.util.date;
import java.util.formatter;
import java.util.hashmap;
import java.util.iterator;
import java.util.map;
import java.util.set;

import javax.management.mbeanattributeinfo;
import javax.management.mbeaninfo;
import javax.management.mbeanserverconnection;
import javax.management.objectinstance;
import javax.management.objectname;
import javax.management.openmbean.compositedatasupport;
import javax.management.remote.jmxconnector;
import javax.management.remote.jmxconnectorfactory;
import javax.management.remote.jmxserviceurl;
/**
 * @author liuyazhuang
 * @date 2016-05-31 
 */
public class jmxtest {

    /**
     * main方法
     * @param args
     */
    public static void main(string[] args) {
        try {

            string jmxurl = "service:jmx:rmi:///jndi/rmi://127.0.0.1:8999/jmxrmi";

            jmxserviceurl serviceurl = new jmxserviceurl(jmxurl);

            map map = new hashmap();
            string[] credentials = new string[] { "monitorrole", "tomcat" };
            map.put("jmx.remote.credentials", credentials);
            jmxconnector connector = jmxconnectorfactory.connect(serviceurl,
                    map);
            mbeanserverconnection mbsc = connector.getmbeanserverconnection();

            // 端口最好是动态取得
            objectname threadobjname = new objectname(
                    "catalina:type=threadpool,name=http-8080");
            mbeaninfo mbinfo = mbsc.getmbeaninfo(threadobjname);

            string attrname = "currentthreadcount";// tomcat的线程数对应的属性值
            mbeanattributeinfo[] mbattributes = mbinfo.getattributes();
            system.out.println("currentthreadcount:"
                    + mbsc.getattribute(threadobjname, attrname));

            // heap
            for (int j = 0; j < mbsc.getdomains().length; j++) {
                system.out.println("###########" + mbsc.getdomains()[j]);
            }
            set mbeanset = mbsc.querymbeans(null, null);
            system.out.println("mbeanset.size() : " + mbeanset.size());
            iterator mbeansetiterator = mbeanset.iterator();
            while (mbeansetiterator.hasnext()) {
                objectinstance objectinstance = (objectinstance) mbeansetiterator
                        .next();
                objectname objectname = objectinstance.getobjectname();
                string canonicalname = objectname.getcanonicalname();
                system.out.println("canonicalname : " + canonicalname);
                if (canonicalname
                        .equals("catalina:host=localhost,type=cluster")) {
                    // get details of cluster mbeans
                    system.out.println("cluster mbeans details:");
                    system.out
                            .println("=========================================");
                    // getmbeansdetails(canonicalname);
                    string canonicalkeyproplist = objectname
                            .getcanonicalkeypropertyliststring();
                }
            }
            // ------------------------- system ----------------------
            objectname runtimeobjname = new objectname("java.lang:type=runtime");
            system.out.println("厂商:"
                    + (string) mbsc.getattribute(runtimeobjname, "vmvendor"));
            system.out.println("程序:"
                    + (string) mbsc.getattribute(runtimeobjname, "vmname"));
            system.out.println("版本:"
                    + (string) mbsc.getattribute(runtimeobjname, "vmversion"));
            date starttime = new date((long) mbsc.getattribute(runtimeobjname,
                    "starttime"));
            simpledateformat df = new simpledateformat("yyyy-mm-dd hh:mm:ss");
            system.out.println("启动时间:" + df.format(starttime));

            long timespan = (long) mbsc.getattribute(runtimeobjname, "uptime");
            system.out.println("连续工作时间:" + jmxtest.formattimespan(timespan));
            // ------------------------ jvm -------------------------
            // 堆使用率
            objectname heapobjname = new objectname("java.lang:type=memory");
            memoryusage heapmemoryusage = memoryusage
                    .from((compositedatasupport) mbsc.getattribute(heapobjname,
                            "heapmemoryusage"));
            long maxmemory = heapmemoryusage.getmax();// 堆最大
            long commitmemory = heapmemoryusage.getcommitted();// 堆当前分配
            long usedmemory = heapmemoryusage.getused();
            system.out.println("heap:" + (double) usedmemory * 100
                    / commitmemory + "%");// 堆使用率

            memoryusage nonheapmemoryusage = memoryusage
                    .from((compositedatasupport) mbsc.getattribute(heapobjname,
                            "nonheapmemoryusage"));
            long noncommitmemory = nonheapmemoryusage.getcommitted();
            long nonusedmemory = heapmemoryusage.getused();
            system.out.println("nonheap:" + (double) nonusedmemory * 100
                    / noncommitmemory + "%");

            objectname permobjname = new objectname(
                    "java.lang:type=memorypool,name=perm gen");
            memoryusage permgenusage = memoryusage
                    .from((compositedatasupport) mbsc.getattribute(permobjname,
                            "usage"));
            long committed = permgenusage.getcommitted();// 持久堆大小
            long used = heapmemoryusage.getused();//
            system.out.println("perm gen:" + (double) used * 100 / committed
                    + "%");// 持久堆使用率

            // -------------------- session ---------------
            objectname managerobjname = new objectname(
                    "catalina:type=manager,*");
            set<objectname> s = mbsc.querynames(managerobjname, null);
            for (objectname obj : s) {
                system.out.println("应用名:" + obj.getkeyproperty("path"));
                objectname objname = new objectname(obj.getcanonicalname());
                system.out.println("最大会话数:"
                        + mbsc.getattribute(objname, "maxactivesessions"));
                system.out.println("会话数:"
                        + mbsc.getattribute(objname, "activesessions"));
                system.out.println("活动会话数:"
                        + mbsc.getattribute(objname, "sessioncounter"));
            }

            // ----------------- thread pool ----------------
            objectname threadpoolobjname = new objectname(
                    "catalina:type=threadpool,*");
            set<objectname> s2 = mbsc.querynames(threadpoolobjname, null);
            for (objectname obj : s2) {
                system.out.println("端口名:" + obj.getkeyproperty("name"));
                objectname objname = new objectname(obj.getcanonicalname());
                system.out.println("最大线程数:"
                        + mbsc.getattribute(objname, "maxthreads"));
                system.out.println("当前线程数:"
                        + mbsc.getattribute(objname, "currentthreadcount"));
                system.out.println("繁忙线程数:"
                        + mbsc.getattribute(objname, "currentthreadsbusy"));
            }

        } catch (exception e) {
            e.printstacktrace();
        }
    }

    public static string formattimespan(long span) {
        long minseconds = span % 1000;

        span = span / 1000;
        long seconds = span % 60;

        span = span / 60;
        long mins = span % 60;

        span = span / 60;
        long hours = span % 24;

        span = span / 24;
        long days = span;
        return (new formatter()).format("%1$d天 %2$02d:%3$02d:%4$02d.%5$03d",
                days, hours, mins, seconds, minseconds).tostring();
    }
}

到此这篇关于使用jmx监控tomcat示例代码的文章就介绍到这了,更多相关jmx监控tomcat内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • 使用Tomcat无法访问http:localhost:8080的解决方法

    我们在tomcat网站下载apache tomcat® - welcome!后解压在电脑上面。本地下载地址:一.检查tomcat配置的环境变量1. tomcat需与jdk搭…

    2024年05月18日 服务器
  • 配置tomcat的图文教程

    一、官网下载tomcat安装包,任意版本,以tomcat 9为例:二、查看电脑支持32还是64,选择合适版本下载安装包,完成后解压,保存在磁盘中三、配置环境变量,在此电脑&mdas…

    2024年05月18日 服务器
  • tomcat优化配置小结

    1修改tomcat的内存配置,打开$tomcat_home/bin/catalina.sh文件内存优化:-server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多…

    2024年05月18日 服务器
  • tomcat漏洞汇总

    put 任意文件上传(cve-2017-12615)影响版本tomcat 7.0.0~7.0.79漏洞复现1. 访问apache tomcat首页 http://192.168.1…

    2024年05月18日 服务器
  • tomcat配置虚拟路径的实现步骤

    配置虚拟路径的方式有两种,通常我们是在tomcat目录下的conf/server.xml文件标签中进行配置,这种方式相对来讲比较常用,但今天小编为大家讲的是比较方便的第二种配置方式…

    2024年05月18日 服务器
  • Tomcat简单网站部署的三种方式小结

    Tomcat简单网站部署的三种方式小结

    1、隐式部署为什么可以隐式部署,是因为 tomcat 配置了默认主机对应应用 webapps,在 engine 下你也可以配置其他主机(要保证你配置的主机在 e... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com