JXM 监控tomcat 7(含代码
admin bibo
jmxremote.access 文件末尾:
admin read #(这里只要有read权限就够了,不需要readwrite)
JAVA_OPTS=
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import javax.management.MBeanServerConnection;
- import javax.management.ObjectName;
- import javax.management.remote.JMXConnector;
- import javax.management.remote.JMXConnectorFactory;
- import javax.management.remote.JMXServiceURL;
- public class TomcatMonitor {
- public static String host="127.0.0.1";
- public static String port="10001";
- public static String user="monitor";
- public static String pwd="adchina";
- public static String connector="\"http-bio-8080\"";
- public static String basepath="/monitordata";
- public static void main(String[] args) throws IOException{
- Parser(args);
- String jmxUrl="service:jmx:rmi:///jndi/rmi://"+host+":"+port+"/jmxrmi";
- int jvm_memory_free=0;
- int jvm_memory_max=0;
- int jvm_memory_total=0;
- int connector_max_time=0;
- int connector_error_count=0;
- int connector_bytes_sent=0;
- int connector_processing_time=0;
- int connector_request_count=0;
- int connector_bytes_received=0;
- int connector_current_thread_count=0;
- int connector_min_spare_threads=0;
- int connector_max_threads=0;
- int connector_max_spare_threads=0;
- int connector_current_threads_busy=0;
- JMXConnector jmxConnector =null;
- try {
- JMXServiceURL serviceURL=new JMXServiceURL(jmxUrl);
- Map<String,String[]> map=new HashMap<String,String[]>();
- String[] credentials = new String[] { user, pwd };
- map.put("jmx.remote.credentials", credentials);
- jmxConnector = JMXConnectorFactory.connect(serviceURL, map);
- MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();
- ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name="+connector+"");
- connector_current_thread_count=Integer.parseInt(mbsc.getAttribute(threadObjName, "currentThreadCount").toString());
- connector_min_spare_threads=Integer.parseInt(mbsc.getAttribute(threadObjName, "minSpareThreads").toString());
- connector_max_threads=Integer.parseInt(mbsc.getAttribute(threadObjName, "maxThreads").toString());
- //if(mbsc.getAttribute(threadObjName, "maxSpareThreads")!=null)
- // connector_max_spare_threads=Integer.parseInt(mbsc.getAttribute(threadObjName, "maxSpareThreads").toString());
- connector_current_threads_busy=Integer.parseInt(mbsc.getAttribute(threadObjName, "currentThreadsBusy").toString());
- ObjectName requestObjectName=new ObjectName("Catalina:type=RequestProcessor,worker=\"http-bio-8080\",name=HttpRequest1");
- connector_max_time=Integer.parseInt(mbsc.getAttribute(requestObjectName, "maxTime").toString());
- connector_error_count=Integer.parseInt(mbsc.getAttribute(requestObjectName, "errorCount").toString());
- connector_bytes_sent=Integer.parseInt(mbsc.getAttribute(requestObjectName, "bytesSent").toString());
- connector_processing_time=Integer.parseInt(mbsc.getAttribute(requestObjectName, "processingTime").toString());
- connector_request_count=Integer.parseInt(mbsc.getAttribute(requestObjectName, "requestCount").toString());
- connector_bytes_received=Integer.parseInt(mbsc.getAttribute(requestObjectName, "bytesReceived").toString());
- String output_str="jvm_memory_free:"+jvm_memory_free+" jvm_memory_max:"+jvm_memory_max+" jvm_memory_total:"+jvm_memory_total+
- " connector_max_time:"+connector_max_time+" connector_error_count:"+connector_error_count+" connector_bytes_sent:"+connector_bytes_sent+" connector_bytes_received:"+connector_bytes_received+
- " connector_processing_time:"+connector_processing_time+" connector_request_count:"+connector_request_count+" connector_current_thread_count:"+connector_current_thread_count+
- " connector_min_spare_threads:"+connector_min_spare_threads+" connector_max_threads:"+connector_max_threads+" connector_max_spare_threads:"+connector_max_spare_threads+
- " connector_current_threads_busy:"+connector_current_threads_busy;
- saveDataToFile(output_str);
- } catch (Exception e) {
- errorLog(e.getMessage());
- }
- finally
- {
- if(connector!=null)
- {
- try {
- jmxConnector.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- public static void Parser(String[] args)
- {
- Map<String, String> opt=new HashMap<String,String>();
- for(int i=0;i<args.length;i++){
- if(args[i].equals("-h")||args[i].equals("--help"))
- {
- System.out.println("-h,--help show this help message and exit");
- System.out.println("-H HOST tomcat server host");
- System.out.println("-P PORT tomcat server port");
- System.out.println("-u USER jmx user");
- System.out.println("-p PWD jmx password");
- System.out.println("--path BASEPATH data & log file base path");
- System.exit(0);
- }
- if(args[i].startsWith("-")&&(i+1)<args.length){
- opt.put(args[i], args[i+1]);
- }
- }
- host=opt.containsKey("-H")?opt.get("-H"):host;
- port=opt.containsKey("-P")?opt.get("-P"):port;
- user=opt.containsKey("-u")?opt.get("-u"):user;
- pwd=opt.containsKey("-p")?opt.get("-p"):pwd;
- connector=opt.containsKey("-c")?opt.get("-c"):connector;
- basepath=opt.containsKey("--path")?opt.get("--path"):basepath;
- }
- public static void saveDataToFile(String data_str) throws IOException
- {
- Date dt=new Date();
- String date= new SimpleDateFormat("yyyy.MM.dd").format(dt);
- String now=new SimpleDateFormat("HH.mm.ss").format(dt);
- String path=basepath+"/Tomcat/data/"+date+"/";
- File directory=new File(path);
- if(!directory.exists())
- directory.mkdirs();
- String filePath=path+now+".csv";
- File dataFile=new File(filePath);
- if(!dataFile.exists())
- dataFile.createNewFile();
- FileOutputStream fos = new FileOutputStream(filePath,true);
- fos.write(data_str.getBytes());
- fos.close();
- }
- public static void errorLog(String mes) throws IOException{
- Date dt=new Date();
- String date= new SimpleDateFormat("yyyy.MM.dd").format(dt);
- String now=new SimpleDateFormat("HH:mm:ss").format(dt);
- String path=basepath+"/Tomcat/log/";
- File directory=new File(path);
- if(!directory.exists())
- directory.mkdirs();
- String filePath=path+date+".csv";
- File dataFile=new File(filePath);
- if(!dataFile.exists())
- dataFile.createNewFile();
- FileOutputStream fos = new FileOutputStream(filePath,true);
- fos.write(("["+now+"]:"+mes+"\r\n").getBytes());
- fos.close();
- }
- }
JXM 监控tomcat 7(含代码的更多相关文章
- LoadRunner如何监控Tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- Jconsole 监控tomcat
通过jconsole监控可以获取监控tomcat的相关的数据信息 如何通过代码来获取其中的线程和内存状况呢? 首先要配置好jconsole监控的相关配置,一搜基本就是那一个, 配置配不好的话接下来的工 ...
- 性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置
转载:http://bbs.51testing.com/thread-90047-1-1.html 性能测试中用LambdaProbe监控TomcatLambdaProbe 是一款强大的免费开源工具, ...
- LR如何监控tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- zabbix监控自动发现监控tomcat(V1)
背景说明: 由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题.但是个人感觉这种方法还是蛮麻烦的,所以写一篇使 ...
- 如何监控tomcat性能
如何监控tomcat性能:[1]工具一 | 浏览:155 | 更新:2014-12-13 10:06 1 2 3 4 5 6 分步阅读 tomcat经常被用作中间件,也有直接作WEB的,自带的工具不是 ...
- 如何监控Tomcat服务器
如何监控Tomcat服务器 发表于:2009-06-25来源:作者:点击数:2651 标签:tomcatTomcat服务器 在进行 性能测试 时,一般都需要对应用服务器进行监控,监控的指标包括应用服务 ...
- 监控应用服务器使用JMX监控Tomcat (推荐)
前言:做了一个监控应用服务器的项目(支持Tocmat.WebSphere.WebLogic各版本), 过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯 ...
- 守护进程监控tomcat并自己主动重新启动
昨天的tomcat问题.一天挂了3,4回,受不了了决定写个监控tomcat进程并自己主动重新启动的脚本! 在网上查资料.主要分为两类:一类是定时重新启动tomcat,这当然不是我须要的.还有一类是监控 ...
随机推荐
- (杭电 1702)ACboy needs your help again!
ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- AtCoder Regular Contest 098 F.Donation
传送门 首先,对于一个点i,进入这个点前必须大于等于Ai,每个点必须捐赠Bi 那么我们可以在每个点最后一次经过的时候再捐赠,这样显然更优 现在我们假设每个点都是最后一次经过的时候捐赠.现在我们把捐赠的 ...
- MySQL高级第四章——MySQL的锁机制
一.概述 1.定义 锁是计算机协调多个进程或线程并发访问某一资源的限制. 2.分类 操作类型来分: 读锁(共享锁)和写锁(排它锁) 数据粒度来分: 表锁和行锁 二.三锁 1.表锁——偏读 特点: 偏向 ...
- 20145207 ms11_050漏洞攻击
实验过程 查看两台主机ip,并ping通 启动msf,进入该漏洞模块,查看漏洞的信息 exploit生成网站地址,开启服务
- BZOJ1066_蜥蜴_KEY
题目传送门 经过长时间的旅行,很长时间没写过博客了,这次把上次WA的题目过了. 由于每次蜥蜴从石柱上跳下时,石柱的高度会-1,可以看做占了一格的流量. 建图: 1.建超级源和超级汇,设超级源连到每只蜥 ...
- Android7.0 应用内升级
Android7.0应用内升级 最近线上项目在7.0机器上出现应用内升级失败,原来是由于Android7.0权限问题导致. 如果项目的 targetSdkVersion>=24 在处理应用内升级 ...
- React中类定义组件constructor 和super
刚开始学习React没多久,在老师的教程里看到了类组件的使用示例,但是和资料上有些冲突,而引发了一些疑问: 类组件中到底要不要定义构造函数constructor()? super()里边到底要不要传入 ...
- uvaoj1339 - Ancient Cipher(思维题,排序,字符串加密)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- selenium--特殊元素定位
该篇博客总结特殊元素(select.radio\checkbox.时间控件.文件上传.图片验证码.模拟鼠标操作.Js 或 JQuery调用)操作. 1.select @Test public void ...
- Ubuntu安装netdata监控平台
介绍 Netdata通过可扩展的Web仪表板提供准确的性能监控,可以显示Linux系统上的流程和服务.它监控有关CPU,内存,磁盘,网络,进程等指标. Netdata官网地址:https://my-n ...