jxl访问tomcat得到Tomcat性能数据

1.1.windows发布tomcat服务,并且启动tomcat,则如下

l  cmd -> regedit打开注册表,找到如下服务,在Java ->Options原内容下新增如下内容:

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9009 –>jmx端口

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false



import java.io.IOException;
import java.lang.management.MemoryUsage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Tomcat应用服务器操作工具类
 */
public class TomcatServerUtil {

	/**
	 * 根据tomcat应用服务器对应的jmx地址获取应用服务器信息 注:参照《tomcat服务器信息监控.docx》文档进行配置方可使用本方法
	 * 
	 * @param jmxURL
	 *            :应用服务器对应的jmx地址
	 * @return
	 * @throws ZysoftException
	 */
	public static Map<String, Object> getTomcatServerInfo(String jmxURL)
			throws Exception {
		Map<String, Object> serverInfo = new HashMap<String, Object>();
		JMXConnector connector = null;
		try {
			JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
			connector = JMXConnectorFactory.connect(serviceURL);
			MBeanServerConnection mbsc = connector.getMBeanServerConnection();

			// ------------------------- 获取tomcat应用服务器系统信息
			// ----------------------
			String serverIp = jmxURL.substring((jmxURL.lastIndexOf("//") + 1),
					jmxURL.lastIndexOf("/"));// 应用服务器IP
			ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
			Date starttime = new Date((Long) mbsc.getAttribute(runtimeObjName,
					"StartTime"));
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Long timespan = (Long) mbsc.getAttribute(runtimeObjName, "Uptime");

			String systemFactory = (String) mbsc.getAttribute(runtimeObjName,
					"VmVendor");// 厂商
			String program = (String) mbsc.getAttribute(runtimeObjName,
					"VmName");// 程序
			String version = (String) mbsc.getAttribute(runtimeObjName,
					"VmVersion");// 版本
			String startTime = df.format(starttime);// tomcat启动时间
			String continueWorkTime = TomcatServerUtil.formatTimeSpan(timespan);// tomcat连续工作时间

			// ------------------------ 获取tomcat应用服务器中java的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();

			String setJvmMemory = heapMemoryUsage.getInit() / 1024 / 1024
					+ "MB";// 设置的JVM堆内存
			String maxJvmMemory = maxMemory / 1024 / 1024 + "MB";// 最大堆内存
			String currJvmMemory = commitMemory / 1024 / 1024 + "MB";// 当前堆内存
			String usedJvmMemory = usedMemory / 1024 / 1024 + "MB";// 已使用堆内存
			String freeJvmMemory = (maxMemory - usedMemory) / 1024 / 1024
					+ "MB";// 剩余堆内存
			String usedPercent = (double) usedMemory * 100 / commitMemory + "%";// heap堆使用率
			/*
			System.out.println("--------------------获取【" + serverIp
					+ "】应用服务器信息-------------------------");
			System.out.println("厂商systemFactory:" + systemFactory);
			System.out.println("程序program:" + program);
			System.out.println("版本version:" + version);
			System.out.println("启动时间startTime:" + startTime);
			System.out.println("连续工作时间continueWorkTime:" + continueWorkTime);
			System.out.println("设置的JVM堆内存setJvmMemory:" + setJvmMemory);
			System.out.println("最大堆内存maxJvmMemory:" + maxJvmMemory);
			System.out.println("当前堆内存currJvmMemory:" + currJvmMemory);
			System.out.println("已使用堆内存usedJvmMemory:" + usedJvmMemory);
			System.out.println("	剩余堆内存freeJvmMemory:" + freeJvmMemory);
			System.out.println("heap堆使用率usedPercent:" + usedPercent);
			*/
			MemoryUsage nonheapMemoryUsage = MemoryUsage
					.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
							"NonHeapMemoryUsage"));
			long noncommitMemory = nonheapMemoryUsage.getCommitted();
			long nonusedMemory = heapMemoryUsage.getUsed();
			String nonUsedPercent = (double) nonusedMemory * 100
					/ noncommitMemory + "%";// heap堆未使用率
		//	System.out.println("heap堆未使用率:" + nonUsedPercent);

			// 封装应用服务器信息并返回
			serverInfo.put("systemFactory", systemFactory);
			serverInfo.put("program", program);
			serverInfo.put("version", version);
			serverInfo.put("startTime", startTime);
			serverInfo.put("continueWorkTime", continueWorkTime);
			serverInfo.put("setJvmMemory", setJvmMemory);
			serverInfo.put("maxJvmMemory", maxJvmMemory);
			serverInfo.put("currJvmMemory", currJvmMemory);
			serverInfo.put("usedJvmMemory", usedJvmMemory);
			serverInfo.put("freeJvmMemory", freeJvmMemory);
			serverInfo.put("usedPercent", usedPercent);
			serverInfo.put("nonUsedPercent", nonUsedPercent);
			serverInfo.put("currentThreadCount", "1");
			serverInfo.put("maxThreads", "500");
			// -------------------- 获取tomcat应用服务器的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")); }
			 */

			// ----------------- 获取tomcat应用服务器的线程池Thread Pool信息----------------
			ObjectName threadpoolObjName = new ObjectName(
					"Catalina:type=ThreadPool,*");
			Set<ObjectName> s2 = mbsc.queryNames(threadpoolObjName, null);
			for (ObjectName obj : s2) {
				String name = obj.getKeyProperty("name");// 端口名
				if (name.indexOf("http-") == -1) {
					continue;
				}
				ObjectName objname = new ObjectName(obj.getCanonicalName());
				Object maxThreads = mbsc.getAttribute(objname, "maxThreads");// 最大线程数
				Object currentThreadCount = mbsc.getAttribute(objname,
						"currentThreadCount");// 当前线程数
				Object currentThreadsBusy = mbsc.getAttribute(objname,
						"currentThreadsBusy");// 繁忙线程数
				serverInfo.put("portName", name);
				serverInfo.put("maxThreads", maxThreads);
				serverInfo.put("currentThreadCount", currentThreadCount);
				serverInfo.put("currentThreadsBusy", currentThreadsBusy);
				/*
				System.out.println("端口名name:" + name);
				System.out.println("最大线程数maxThreads:" + maxThreads);
				System.out.println("当前线程数currentThreadCount:" + currentThreadCount);
				System.out.println("繁忙线程数currentThreadsBusy:" + currentThreadsBusy);
				*/
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception(e);
		} finally {
			try {
				if (connector != null)
					connector.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
		return serverInfo;
	}

	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();
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white......

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值