通过jconsole监控可以获取监控tomcat的相关的数据信息

如何通过代码来获取其中的线程和内存状况呢?

首先要配置好jconsole监控的相关配置,一搜基本就是那一个,

配置配不好的话接下来的工作就做不好了,所有要先配置好,然后可以上代码了:

  1. package one;
  2.  
  3. import java.io.IOException;
  4. import java.lang.management.MemoryMXBean;
  5. import java.lang.management.MemoryUsage;
  6. import java.lang.management.ThreadMXBean;
  7.  
  8. import java.lang.reflect.*;
  9. import java.util.*;
  10.  
  11. import javax.management.*;
  12. import javax.management.remote.*;
  13.  
  14. //mxbean_name constant
  15. import static java.lang.management.ManagementFactory.*;
  16.  
  17. public class MyJconsole {
  18.  
  19. private SnapshotMBeanServerConnection server = null;
  20. private String jmxURL = null;
  21. private MBeanServerConnection mbsc = null;
  22. private JMXConnector connector = null;
  23.  
  24. private JMXServiceURL serviceURL;
  25. private Map<String, String[]> map;
  26. private boolean hasPlatformMXBeans = false;
  27.  
  28. private ThreadMXBean threadMBean = null;
  29. private MemoryMXBean memoryMBean = null;
  30.  
  31. public interface SnapshotMBeanServerConnection
  32. extends MBeanServerConnection {
  33. /**
  34. * Flush all cached values of attributes.
  35. */
  36. public void flush();
  37. }
  38.  
  39. public static class Snapshot {
  40. private Snapshot() {
  41. }
  42. public static SnapshotMBeanServerConnection
  43. newSnapshot(MBeanServerConnection mbsc) {
  44. final InvocationHandler ih = new SnapshotInvocationHandler(mbsc);
  45. return (SnapshotMBeanServerConnection) Proxy.newProxyInstance(
  46. Snapshot.class.getClassLoader(),
  47. new Class[] {SnapshotMBeanServerConnection.class},
  48. ih);
  49. }
  50. }
  51.  
  52. public synchronized ThreadMXBean getThreadMXBean() throws IOException {
  53. if (hasPlatformMXBeans && threadMBean == null) {
  54. threadMBean =
  55. newPlatformMXBeanProxy(server, THREAD_MXBEAN_NAME,
  56. ThreadMXBean.class);
  57. }
  58. return threadMBean;
  59. }
  60.  
  61. public synchronized MemoryMXBean getMemoryMXBean() throws IOException {
  62. if (hasPlatformMXBeans && memoryMBean == null) {
  63. memoryMBean =
  64. newPlatformMXBeanProxy(server, MEMORY_MXBEAN_NAME,
  65. MemoryMXBean.class);
  66. }
  67. return memoryMBean;
  68. }
  69.  
  70. public MyJconsole(){
  71. jmxURL = "service:jmx:rmi:///jndi/rmi://127.0.0.1:8999/jmxrmi";
  72. map = new HashMap<String, String[]>();
  73. String[] credentials = new String[] { "monitorRole", "tomcat" };
  74. map.put("jmx.remote.credentials", credentials);
  75. }
  76.  
  77. public void tryConnect() throws IOException {
  78. try {
  79. serviceURL = new JMXServiceURL(jmxURL);
  80. connector = JMXConnectorFactory.connect(serviceURL,map);
  81. mbsc = connector.getMBeanServerConnection();
  82. server = Snapshot.newSnapshot(mbsc);
  83. ObjectName on = new ObjectName(THREAD_MXBEAN_NAME);
  84. hasPlatformMXBeans = server.isRegistered(on);
  85. } catch (Exception e) {
  86. e.printStackTrace();
  87. }
  88. }
  89.  
  90. public static void main(String[] args){
  91. try {
  92. MyJconsole mjc = new MyJconsole();
  93. mjc.tryConnect();
  94. ThreadMXBean tmBean = mjc.getThreadMXBean();
  95. MemoryMXBean memoryBean = mjc.getMemoryMXBean();
  96. int tlCount = tmBean.getThreadCount();
  97. int tdCount = tmBean.getDaemonThreadCount();
  98. int tpCount = tmBean.getPeakThreadCount();
  99. long ttCount = tmBean.getTotalStartedThreadCount();
  100. System.out.println("活动线程个数: "+tlCount); //当前线程数
  101. System.out.println("峰值: " + tpCount);
  102. System.out.println("守护线程数: " + tdCount);
  103. System.out.println("启动线程数总数:" + ttCount);
  104. MemoryUsage u = memoryBean.getHeapMemoryUsage();
  105. long memUsed = u.getUsed();
  106. long memMax = u.getMax();
  107. long memCommited = u.getCommitted();
  108. System.out.println("堆内存使用大小:"+ memUsed/1024+"Kb"); //堆内存;
  109. System.out.println("当前堆大小: " + memUsed + "Kb");
  110. System.out.println("最大堆大小:" + memMax + "Kb");
  111.  
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115.  
  116. }
  117.  
  118. static class SnapshotInvocationHandler implements InvocationHandler {
  119.  
  120. private final MBeanServerConnection conn;
  121. private Map<ObjectName, NameValueMap> cachedValues = newMap();
  122. private Map<ObjectName, Set<String>> cachedNames = newMap();
  123.  
  124. @SuppressWarnings("serial")
  125. private static final class NameValueMap
  126. extends HashMap<String, Object> {}
  127.  
  128. SnapshotInvocationHandler(MBeanServerConnection conn) {
  129. this.conn = conn;
  130. }
  131.  
  132. synchronized void flush() {
  133. cachedValues = newMap();
  134. }
  135.  
  136. public Object invoke(Object proxy, Method method, Object[] args)
  137. throws Throwable {
  138. final String methodName = method.getName();
  139. if (methodName.equals("getAttribute")) {
  140. return getAttribute((ObjectName) args[0], (String) args[1]);
  141. } else if (methodName.equals("getAttributes")) {
  142. return getAttributes((ObjectName) args[0], (String[]) args[1]);
  143. } else if (methodName.equals("flush")) {
  144. flush();
  145. return null;
  146. } else {
  147. try {
  148. return method.invoke(conn, args);
  149. } catch (InvocationTargetException e) {
  150. throw e.getCause();
  151. }
  152. }
  153. }
  154.  
  155. private Object getAttribute(ObjectName objName, String attrName)
  156. throws MBeanException, InstanceNotFoundException,
  157. AttributeNotFoundException, ReflectionException, IOException {
  158. final NameValueMap values = getCachedAttributes(
  159. objName, Collections.singleton(attrName));
  160. Object value = values.get(attrName);
  161. if (value != null || values.containsKey(attrName)) {
  162. return value;
  163. }
  164. // Not in cache, presumably because it was omitted from the
  165. // getAttributes result because of an exception. Following
  166. // call will probably provoke the same exception.
  167. return conn.getAttribute(objName, attrName);
  168. }
  169.  
  170. private AttributeList getAttributes(
  171. ObjectName objName, String[] attrNames) throws
  172. InstanceNotFoundException, ReflectionException, IOException {
  173. final NameValueMap values = getCachedAttributes(
  174. objName,
  175. new TreeSet<String>(Arrays.asList(attrNames)));
  176. final AttributeList list = new AttributeList();
  177. for (String attrName : attrNames) {
  178. final Object value = values.get(attrName);
  179. if (value != null || values.containsKey(attrName)) {
  180. list.add(new Attribute(attrName, value));
  181. }
  182. }
  183. return list;
  184. }
  185.  
  186. private synchronized NameValueMap getCachedAttributes(
  187. ObjectName objName, Set<String> attrNames) throws
  188. InstanceNotFoundException, ReflectionException, IOException {
  189. NameValueMap values = cachedValues.get(objName);
  190. if (values != null && values.keySet().containsAll(attrNames)) {
  191. return values;
  192. }
  193. attrNames = new TreeSet<String>(attrNames);
  194. Set<String> oldNames = cachedNames.get(objName);
  195. if (oldNames != null) {
  196. attrNames.addAll(oldNames);
  197. }
  198. values = new NameValueMap();
  199. final AttributeList attrs = conn.getAttributes(
  200. objName,
  201. attrNames.toArray(new String[attrNames.size()]));
  202. for (Attribute attr : attrs.asList()) {
  203. values.put(attr.getName(), attr.getValue());
  204. }
  205. cachedValues.put(objName, values);
  206. cachedNames.put(objName, attrNames);
  207. return values;
  208. }
  209.  
  210. // See http://www.artima.com/weblogs/viewpost.jsp?thread=79394
  211. private static <K, V> Map<K, V> newMap() {
  212. return new HashMap<K, V>();
  213. }
  214. }
  215.  
  216. }

Jconsole 监控tomcat的更多相关文章

  1. jconsole监控tomcat

    一.专业术语 GC垃圾回收机制:当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收内存空间. JMX(Java Management Extensions,即Java管理扩展)是一个为 ...

  2. 通过JCONSOLE监控TOMCAT的JVM使用情况

    这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL“: http://blog.163.com/kangle0925@126/blog/static/277581982011527723 ...

  3. 使用jconsole监控tomcat(推荐配置)

    1.在tomcat启动过程中,开启相应的参数配置 $Tomcat_home/bin/catalina.sh: 1 2 3 4 -Dcom.sun.management.jmxremote -Dcom. ...

  4. 通过jconsole监控tomcat JVM 内存、线程、CPU

    从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击  ...

  5. Jconsole监控tomcat 的JVM内存的设置

    主要参考这位仁兄的文章  http://elf8848.iteye.com/blog/471676 照做后发现还是不行,原来是Linux服务器配置了多块网卡,在设置 Djava.rmi.server. ...

  6. LoadRunner监控Tomcat的几种方法

    通过JConsole监控Tomcat 1.打开tomcat5的bin目录中的catalina.bat文件,在头部注释部分的后面加上: set JAVA_OPTS=%JAVA_OPTS% -Dcom.s ...

  7. JConsole监控远程Tomcat服务器

    为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了.这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况. c ...

  8. 如何使用JCONSOLE 监控eclipse的tomcat

    在默认情况下,使用jconsole 监控本地tomcat 是不需要任何配置的,直接连接就可以监控tomcat.   但是在eclipse 下启动是监控不了.   解决方法:   设置jvm参数:   ...

  9. JConsole监控Linux上的Tomcat

    JConsole监控Linux上的Tomcat 从Java 5开始引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 ...

随机推荐

  1. 利用arcigs制作出 源解析要用的ASCII文件

    准备:1.确定好模拟区域范围,精度,行列数          2.确定好源解析的城市规划 思路: 1.全国省级图+本地市县图-->合成一张区域图(联合) 合成之后,添加一个字段,一个数字类型字段 ...

  2. 26、Oracle(二)

    1)掌握多行函数与分组操作 2)掌握多表查询与子查询 3)理解集合查询与掌握Oracle分页语法 4)理解创建.修改和删除表和表约束 --------------------------------- ...

  3. java面向对象学习笔记

    1.内部类 //外部类HelloWorld public class HelloWorld{ //外部类的私有属性name private String name = "imooc" ...

  4. js实现通用的微信分享组件示例

    一.可定义的信息 1.分享时显示的LOGO:2.分享LOGO的宽度:3.分享LOGO的高度:4.分享出去显示的标题(默认调用网页标题):5.分享出去显示的描述(默认调用网页标题):6.分享链接(默认为 ...

  5. java JPEGImageEncoder;图像处理

    在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JP ...

  6. ACM题目————一笔画问题

    描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数N(N< ...

  7. ACM题目————棋盘问题

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  8. ACM题目————STL练习之Ananagrams

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  9. 在javaEE下学习web(在eclipse中开发动态的WEB工程,servlet的环境搭建,及servlet的一些方法)

    一个简便的方法实现javaee版的eclipse开发动态的WEB工程(javaWEB项目)1.把开发选项切换到javaEE2. 可以在window->shou view 中找到package e ...

  10. JAVA中生成Excel方法

    java 操作 Excel 最常用的就是JXL(java excel api)和POI,今先看下JXL吧.首先可以到 http://www.andykhan.com/jexcelapi/downloa ...