成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

使用JMX監控Tomcat示例代碼

瀏覽:406日期:2023-06-12 15:17:15
目錄
  • 示例代碼
  • 完整的示例代碼文件

示例代碼

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內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Tomcat
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美日韩在线观看a三区| 久久裸体视频| eeuss影院一区二区三区| 91成人在线观看喷潮| 亚洲在线免费播放| 99国产精品视频免费观看一公开 | 99精品在线观看视频| 91麻豆精品国产91久久久资源速度 | 不卡av在线网| 91麻豆精品国产无毒不卡在线观看| 奇米色777欧美一区二区| 久久精品九九| 日韩精品一二三区| 久久久久综合| 秋霞午夜鲁丝一区二区老狼| 久久综合中文| 狂野欧美性猛交blacked| 欧美日韩1区2区| 国产高清在线精品| 日韩欧美在线网站| 国产传媒日韩欧美成人| 日韩欧美一二三四区| 懂色一区二区三区免费观看| 精品精品欲导航| 91农村精品一区二区在线| 国产欧美日韩精品a在线观看| 午夜亚洲福利| 综合激情成人伊人| 日韩午夜免费视频| 亚洲国产成人av网| 色婷婷激情久久| 国产一区二区三区最好精华液| 欧美一级二级在线观看| 99久久精品免费看国产| 国产精品欧美久久久久无广告| 国产在线成人| 亚洲一二三四区| 在线亚洲+欧美+日本专区| 国产综合色精品一区二区三区| 337p亚洲精品色噜噜| www.欧美.com| 中文字幕一区二区三区蜜月| 国产欧美日韩伦理| 日韩在线一二三区| 欧美无砖砖区免费| 国产69精品久久99不卡| 国产欧美精品在线观看| 亚洲精品少妇| 日本女优在线视频一区二区| 欧美在线高清视频| 国产成人精品亚洲日本在线桃色| 久久影院午夜论| 欧美午夜不卡| 亚洲福利视频导航| 欧美日韩国产高清一区二区| 国产jizzjizz一区二区| 国产欧美一区二区精品婷婷 | 狠狠色综合播放一区二区| 日韩精品一区二区三区中文不卡| 欧美破处大片在线视频| 亚洲一区二区视频| 欧美裸体一区二区三区| 懂色av一区二区三区蜜臀| 国产精品天美传媒沈樵| 亚洲女同在线| 国产精品一区二区无线| 国产欧美日韩在线| 亚洲伊人网站| 国产+成+人+亚洲欧洲自线| 中文字幕免费观看一区| 美女精品国产| 成人国产精品免费| 亚洲精品视频在线看| 欧美午夜电影一区| 欧美fxxxxxx另类| 亚洲高清免费在线| 日韩欧美精品在线| 亚洲图片在线观看| 久久99深爱久久99精品| 国产亚洲欧洲997久久综合 | 日韩视频一区在线观看| 欧美午夜在线视频| 美女国产一区二区三区| 久久久久久电影| 久久免费国产| 99久久国产综合精品麻豆| 午夜视频在线观看一区| 久久毛片高清国产| 欧美亚洲免费高清在线观看| 成人性生交大片免费看中文网站| 亚洲精品国产精华液| 欧美一二区视频| 国产视频一区三区| 成人av在线网站| 肉肉av福利一精品导航| 国产色产综合色产在线视频| 欧美影院一区二区| 亚洲无线视频| 国产精品一区免费在线观看| 一区二区三区日本| 日韩精品一区在线| 一本大道久久精品懂色aⅴ | 91原创在线视频| 琪琪久久久久日韩精品| 国产精品污网站| 91麻豆精品国产91久久久更新时间 | 亚洲一区免费观看| 亚洲精品一区二区三区影院| 91成人免费网站| 影音先锋久久资源网| 国产精品一二三区在线| 亚洲天堂福利av| 精品少妇一区二区三区日产乱码| 亚洲一区免费看| 欧美成人高清| 极品少妇一区二区三区精品视频| 亚洲日本免费电影| 精品电影一区二区三区| 欧美少妇性性性| 一本一本久久a久久精品综合妖精| 国产盗摄精品一区二区三区在线| 亚洲综合色自拍一区| 久久久久久久久久久久久女国产乱 | 色综合视频一区二区三区高清| 日韩在线a电影| 国产精品剧情在线亚洲| 日韩精品一区在线观看| 久久一区国产| 亚洲三级网站| 99re在线精品| 国产美女av一区二区三区| 亚洲成人免费影院| 国产精品美日韩| 精品久久久久久久一区二区蜜臀| 先锋亚洲精品| 含羞草久久爱69一区| 97精品久久久久中文字幕| 久久国产尿小便嘘嘘| 亚洲成精国产精品女| 中文字幕亚洲区| 国产欧美一区二区在线观看| 精品欧美久久久| 欧美日韩国产在线观看| 色呦呦国产精品| 99精品欧美| 韩国精品一区二区三区| 99久久精品国产一区二区三区 | 久久久久se| 欧美日韩少妇| www.日本不卡| 国产一区不卡视频| 日韩av电影免费观看高清完整版| 国产精品久久毛片a| 精品少妇一区二区三区在线视频 | 日韩精品一区二区在线观看| 欧洲精品视频在线观看| 国产精品外国| 国语对白精品一区二区| 97精品国产露脸对白| 国产馆精品极品| 奇米精品一区二区三区四区| 亚洲免费看黄网站| 国产欧美精品一区二区三区四区| 欧美成va人片在线观看| 欧美精品日韩精品| 午夜国产欧美理论在线播放| 国产成人在线免费观看| 国内久久精品视频| 婷婷亚洲久悠悠色悠在线播放| 一区二区三区免费看视频| 亚洲一区二区三区色| 精品动漫3d一区二区三区免费版 | 在线一区二区视频| 国产午夜久久| 黑丝一区二区| 女人天堂亚洲aⅴ在线观看| 成人的网站免费观看| 国产精品一二三区| 国内精品国产成人| 久久国产视频网| 美腿丝袜亚洲一区| 国产精品国产三级国产三级人妇 | 99久久精品国产一区| 99国产精品一区| 欧美一区二区三区另类| 欧美日本韩国一区二区三区| 国产在线精品二区| 99成人在线| 久久婷婷亚洲| 欧美性猛片aaaaaaa做受| 在线欧美一区二区| 欧美色视频一区| 在线播放中文字幕一区| 4438成人网| 亚洲精品一区二区三区在线观看| 久久这里只有精品首页| 中文字幕 久热精品 视频在线| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品美女久久久久久久网站| 国产精品久久久久7777按摩|