通过JVM获取相关的服务器信息 .
http://blog.csdn.net/zgmzyr/article/details/6903500
http://topmanopensource.iteye.com/blog/833386
?
在我们想监控我们的JVM状态的时候,除了可以通过JMX这类jvm提供的接口服务,还是可以自己通过程序来编写一些接口来获取服务器状态信息。
以下代码我在jdk1.5.10版本上测试通过。
- long startTime=runtimeMXBean.getStartTime(); System.out.println("java 虚拟机的开始启动的时间:"+startTime); runtimeMXBean.getSpecVersion(); System.out.println("规范接口版本::"+operateName); String bottClassPath =runtimeMXBean.getBootClassPath(); System.out.println("操作系统的bootstrap 的classloader:"+bottClassPath); //在 Java 这个多线程的系统中,对线程的监控是相当重要的。ThreadMXBean 就是起到这个作用。 //ThreadMXBean 可以提供的信息包括各个线程的各种状态,CPU 占用情况,以及整个系统中的线 //程状况。从 ThreadMXBean 可以得到某一个线程的 ThreadInfo 对象。这个对象中则包含了这个 //线程的所有信息。 //线程的信息 ThreadMXBean threadMXBean=ManagementFactory.getThreadMXBean(); //所有的线程的编号 long[] threadIds=threadMXBean.getAllThreadIds(); for (long threadId : threadIds) { //线程的信息 ThreadInfo threadInfo=threadMXBean.getThreadInfo(threadId); //线程被阻塞的数量 threadInfo.getBlockedCount(); //被锁定线程的监控信息 MonitorInfo[] monitorInfos=threadInfo.getLockedMonitors(); for (MonitorInfo monitorInfo : monitorInfos) { int depth=monitorInfo.getLockedStackDepth(); System.out.println("锁定的程度:"+depth); } //异步锁定的信息 LockInfo[] lockinfos=threadInfo.getLockedSynchronizers(); //锁定的信息 for (LockInfo lockInfo : lockinfos) { System.out.println("锁定类的名称:"+lockInfo.getClassName()); } //线程的名称 String threadName=threadInfo.getThreadName(); System.out.println("线程的名称:"+threadName); Thread.State state=threadInfo.getThreadState(); System.out.println("线程的信息:"+state.name()); } long cpuTime=threadMXBean.getCurrentThreadCpuTime(); long curentTime=threadMXBean.getCurrentThreadUserTime(); long threadCount=threadMXBean.getDaemonThreadCount(); long peakliveThreadCount=threadMXBean.getPeakThreadCount(); long threadCounts=threadMXBean.getThreadCount(); System.out.println("当前处于live状态的线程总的数量:"+threadCounts); long totalThreadCount=threadMXBean.getTotalStartedThreadCount(); System.out.println("JVM 启动之后,总的自动线程数量:"+totalThreadCount); } /** * * @return */ public static final String getHeapMemoryUsage() { ClassLoadingMXBean mxbean; return ManagementFactory.getMemoryMXBean().getHeapMemoryUsage() .getUsed() + "/" + ManagementFactory.getMemoryMXBean().getHeapMemoryUsage() .getMax(); } /** * 当前使用内存的百分比 * @return */ public static final String getHeapMemoryUsagePercent() { return (((double) ManagementFactory.getMemoryMXBean() .getHeapMemoryUsage().getUsed() / (double) ManagementFactory .getMemoryMXBean().getHeapMemoryUsage().getMax()) * 100L) + "%"; } /** * 当前非java堆占用的百分比 * @return */ public static final String getNonHeapMemoryUsage() { return ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage() .getUsed() + "/" + ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage() .getMax(); } /** * * @return */ public static final String getNonHeapMemoryUsagePercent() { return (((double) ManagementFactory.getMemoryMXBean() .getNonHeapMemoryUsage().getUsed() / (double) ManagementFactory .getMemoryMXBean().getNonHeapMemoryUsage().getMax()) * 100) + "%"; } /** * 获取线程数 * @return */ public static final String getThreadCount() { return "" + ManagementFactory.getThreadMXBean().getThreadCount(); } }
?
?