JMX监控tomcat的配置 银行安全系统的心得
2017-08-22 15:59
537 查看
1.测试环境 ubuntu版本 Linux系统
2.eclipse+Mac环境
3.ftp软件FileZilla
Linux需要配置信息(catalina.sh)。
配置前信息:
配置后信息:
下面则是代码运行jmx获取tomcat信息的代码片
当然在强大的java中 也自带了图形界面监控tomcat的服务,只需要在cmd命令行输入jvisualvm就可以开启。填上ip和端口即可以通过图形界面监控tomcat了。
上面用到的ftp+FileZille只是我不想用vim模式。而偷的懒而已。各位看官不要在乎~。
2.eclipse+Mac环境
3.ftp软件FileZilla
Linux需要配置信息(catalina.sh)。
配置前信息:
配置后信息:
其中 1.Dcom.sun.management.jmxremote.port=1099设置的是你用来运行监听程序的端口号。在设置端口号前,务必保证端口号没有被其他程序占用。 2.Dcom.sun.management.jmxremote.ssl=false设置的是不开启ssl安全认证。 3. Dcom.sun.management.jmxremote.authenticate=false设置的是不开启用户名和密码认证,如果要开启该认证需要去jdk中的etc/java/management中的jmxremote.access和jmxremote.password中最后两行的#去掉。即可以打开用户名密码认证。 4. Djava.rmi.server.hostname=192.168.31.79这里的ip则需要设置你运行tomcat环境的ip地址。
下面则是代码运行jmx获取tomcat信息的代码片
import java.text.*; import java.util.*; import javax.management.*; import javax.management.openmbean.*; import javax.management.remote.*; import java.lang.management.*; public class jmx_tomocat { private static Formatter format = new Formatter(); public static void main(String[] args) { try{ String jmxUrl = "service:jmx:rmi:///jndi/rmi://192.168.31.79:1099/jmxrmi"; //动态唯一变量 java.util.Map<String , String []> map = new java.util.HashMap<String , String []>(); JMXServiceURL serviceURL = new JMXServiceURL(jmxUrl); // String [] credentials = new String[] { "monitorRole", "QED" }; // map.put("jmx.remote.credentials", credentials); //使用密码安全认证的情况 map.put("jmx.remote.credentials", null); //不使用密码安全认证的情况 // JMXConnector connector = JMXConnectorFactory.connect(serviceURL, // map); JMXConnector connector = javax.management.remote.JMXConnectorFactory.connect(serviceURL, null); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); // 端口最好是动态取得 ObjectName grpObjName = new ObjectName("Catalina:type=GlobalRequestProcessor,*"); Set<ObjectName> grps = mbsc.queryNames(grpObjName, null); for (ObjectName obj : grps) { System.out.println("名称:" + obj.getKeyProperty("name")); ObjectName objname = new ObjectName(obj.getCanonicalName()); System.out.println("bytesReceived:" + mbsc.getAttribute(objname, "bytesReceived")); System.out.println("bytesSent:" + mbsc.getAttribute(objname, "bytesSent")); System.out.println("requestCount:" + mbsc.getAttribute(objname, "requestCount")); } ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name=\"*http*\""); Set<ObjectName> smbi = mbsc.queryNames(threadObjName, null); for (ObjectName obj : smbi) { 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")); } // ObjectName threadObjName1 = new // ObjectName("Catalina:type=ThreadPool,name=\"http-apr-8080\""); // MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName1); // // String attrName = "currentThreadCount";// tomcat的线程数对应的属性值 // MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes(); // System.out.println("currentThreadCount:" + // mbsc.getAttribute(threadObjName1, 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.out.println(canonicalKeyPropList); } } // ------------------------ 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("连续工作时间:" + jmx_tomocat.formatTimeSpan(timespan)); // ----------------------- JVM ------------------------- // 堆使用率 ObjectName heapObjName = new ObjectName("java.lang:type=Memory"); MemoryUsage heapMemoryUsage = MemoryUsage .from((CompositeDataSupport) mbsc.getAttribute(heapObjName, "HeapMemoryUsage")); long maxMemory = heapMemoryUsage.getMax();// 堆最大 System.out.println("heap size:" + maxMemory); 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*"); Set<ObjectName> sperm = mbsc.queryNames(permObjName, null); for (ObjectName obj : sperm) { ObjectName objname = new ObjectName(obj.getCanonicalName()); MemoryUsage permGenUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(objname, "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 ee){ ee.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 format.format("%1$d天 %2$02d:%3$02d:%4$02d.%5$03d", days, hours, mins, seconds, minseconds).toString(); } }
当然在强大的java中 也自带了图形界面监控tomcat的服务,只需要在cmd命令行输入jvisualvm就可以开启。填上ip和端口即可以通过图形界面监控tomcat了。
上面用到的ftp+FileZille只是我不想用vim模式。而偷的懒而已。各位看官不要在乎~。
相关文章推荐
- 使用JMX工具远程监控tomcat配置
- JMX配置Tomcat 7.0连接Linux java监控
- Tomcat配置JMX远程监控(Windown7 Linxu)
- 在Lunix下配置使用Jmx监控apache-tomcat性能
- JMX监控 Tomcat JBoss WebLogic WebSphere配置
- zabbix通过JMX监控tomcat,防火墙策略配置
- linux 配置tomcat运行远程监控(JMX)
- Tomcat配置JMX远程监控 Win7 Linxu
- linux tomcat8 配置 jmx监控
- tomcat 配置jmx远程监控
- tomcat中配置jmx监控
- JMX实现远程服务器Tomcat系统监控之二
- sql server 2005 (2008)能成功删除系统存储过程以实现安全配置吗?
- windows 7系统安装与配置Tomcat服务器环境
- sql server系统存储过程及安全配置
- 监控WebSphere 6.1以及WAS6.1生成和配置安全证书的方法
- 利用bastille配置安全的linux系统
- 二、Acegi安全系统的配置
- windows下配置Tomcat为系统服务
- 服务器监控系统Zabbix的主动监控、SNMP监控、JMX监控图解教程(第五章)