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,这当然不是我须要的.还有一类是监控 ...
随机推荐
- Scala学习笔记(五)—— 元组和集合
1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...
- Vue.js核心概念
# 1. Vue.js是什么? 1). 一位华裔前Google工程师(尤雨溪)开发的前端js库 2). 作用: 动态构建用户界面 3). 特点: * 遵循MVVM模式 * 编码简洁, 体积小, 运行效 ...
- 06003_redis在Linux上的安装
1.redis-3.0.0.tar.gz下载链接:redis-3.0.0.tar.gz下载 密码:wpbu 2.安装redis编译的c环境,yum install gcc-c++ : 3.将redis ...
- PostgreSQL 使用总结
1. USING的使用 USING是个缩写的概念:它接收一个用逗号分隔的字段名字列表, 这些字段必须是连接表共有的,最终形成一个连接条件,表示这些字段对必须相同. USING (a, b, c) 等效 ...
- 阿里otter使用问题汇总
最近在使用otter做为和表从库.(100个分表太难查询了) user_00,user_01...user_99 => user_all 1.问题DDL语句不能执行(exception:setl ...
- 问题:MongoDB C# driver异常:Truncation resulted in data loss
问题描述: 原因分析: MongoDB C#驱动在读取数据记录遇到数值类型字段时,如果没有设置允许截断,将抛出TruncationException. 解决方法: [BsonRepresentatio ...
- 金山WPS面试题
1.windows的handle 1)是一个宏定义#define void* HANDLE 2) HANDLE提供了一种统一的方式去获得系统资源,并对其进行操作. 3) HANDLE使得程序设计的细节 ...
- List和String数组相互转化
在工作中经常会遇到需要String[] 参数的地方,我们可以先定义一个list,再转成String[] 来使用,使用list的好处自然是可以随时方便的添加删除元素,下面是方法: List list = ...
- [CH0304]IncDec Sequence
和NOIP2018DAY1T1类似的题目,但思维难度高多了. 这题既可以抬高路面,也可以降低路面,而且目标平面不确定,就难起来了. 但是两道题的基本思路几乎一样,同样我们将 2~n 的高度差分,1之所 ...
- LeetCode - 13. Roman to Integer - 思考if-else与switch的比较 - ( C++ ) - 解题报告
1.题目: 原题:Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range ...