通过JVM获取相关的服务器信息 .

http://blog.csdn.net/zgmzyr/article/details/6903500

http://topmanopensource.iteye.com/blog/833386

在我们想监控我们的JVM状态的时候,除了可以通过JMX这类jvm提供的接口服务,还是可以自己通过程序来编写一些接口来获取服务器状态信息。

以下代码我在jdk1.5.10版本上测试通过。

  1. <SPAN style="FONT-SIZE: 18px">import java.lang.management.CompilationMXBean;
  2. import java.lang.management.GarbageCollectorMXBean;
  3. import java.lang.management.MemoryMXBean;
  4. import java.lang.management.MemoryPoolMXBean;
  5. import java.lang.management.RuntimeMXBean;
  6. import java.lang.management.ThreadMXBean;
  7. import java.util.List;
  8. import sun.management.ManagementFactory;
  9. import com.sun.management.OperatingSystemMXBean;
  10. /**
  11. * java获取所在操作系统的信息,JVM的相关信息
  12. * @author kongqz
  13. * */
  14. public class MyJvm {
  15. /**
  16. * @param 直接通过jdk来获取系统相关状态,在1.5.0_10-b03版本以上测试通过
  17. */
  18. public static void main(String[] args) {
  19. System.out.println("=======================通过java来获取相关系统状态============================ ");
  20. int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位
  21. System.out.println("总的内存量 i is "+i);
  22. int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量
  23. System.out.println("空闲内存量 j is "+j);
  24. System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024);
  25. System.out.println("=======================OperatingSystemMXBean============================ ");
  26. OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
  27. System.out.println(osm.getFreeSwapSpaceSize()/1024);
  28. System.out.println(osm.getFreePhysicalMemorySize()/1024);
  29. System.out.println(osm.getTotalPhysicalMemorySize()/1024);
  30. //获取操作系统相关信息
  31. System.out.println("osm.getArch() "+osm.getArch());
  32. System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());
  33. System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());
  34. System.out.println("osm.getName() "+osm.getName());
  35. System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());
  36. System.out.println("osm.getVersion() "+osm.getVersion());
  37. //获取整个虚拟机内存使用情况
  38. System.out.println("=======================MemoryMXBean============================ ");
  39. MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();
  40. System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());
  41. System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());
  42. //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况
  43. System.out.println("=======================ThreadMXBean============================ ");
  44. ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();
  45. System.out.println("getThreadCount "+tm.getThreadCount());
  46. System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());
  47. System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());
  48. System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());
  49. System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());
  50. //当前编译器情况
  51. System.out.println("=======================CompilationMXBean============================ ");
  52. CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();
  53. System.out.println("getName "+gm.getName());
  54. System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());
  55. //获取多个内存池的使用情况
  56. System.out.println("=======================MemoryPoolMXBean============================ ");
  57. List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();
  58. for(MemoryPoolMXBean mpm:mpmList){
  59. System.out.println("getUsage "+mpm.getUsage());
  60. System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());
  61. }
  62. //获取GC的次数以及花费时间之类的信息
  63. System.out.println("=======================MemoryPoolMXBean============================ ");
  64. List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();
  65. for(GarbageCollectorMXBean gcm:gcmList){
  66. System.out.println("getName "+gcm.getName());
  67. System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());
  68. }
  69. //获取运行时信息
  70. System.out.println("=======================RuntimeMXBean============================ ");
  71. RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();
  72. System.out.println("getClassPath "+rmb.getClassPath());
  73. System.out.println("getLibraryPath "+rmb.getLibraryPath());
  74. System.out.println("getVmVersion "+rmb.getVmVersion());
  75. }
  76. }</SPAN>


1、获取jdk信息

  1. <SPAN style="FONT-SIZE: 18px">System.out.println(System.getProperty("java.version"));
  2. System.out.println(System.getProperty("java.vendor"));
  3. System.out.println(System.getProperty("java.vendor.url"));
  4. System.out.println(System.getProperty("java.home"));
  5. System.out.println(System.getProperty("java.vm.specification.version"));
  6. System.out.println(System.getProperty("java.vm.specification.vendor"));
  7. System.out.println(System.getProperty("java.vm.specification.name"));
  8. System.out.println(System.getProperty("java.vm.version"));
  9. System.out.println(System.getProperty("java.vm.vendor"));
  10. System.out.println(System.getProperty("java.vm.name"));
  11. System.out.println(System.getProperty("java.specification.version"));
  12. System.out.println(System.getProperty("java.specification.vendor"));
  13. System.out.println(System.getProperty("java.specification.name"));
  14. System.out.println(System.getProperty("java.class.version"));
  15. System.out.println(System.getProperty("java.class.path"));
  16. System.out.println(System.getProperty("java.library.path"));
  17. System.out.println(System.getProperty("java.io.tmpdir"));
  18. System.out.println(System.getProperty("java.compiler"));
  19. System.out.println(System.getProperty("java.ext.dirs")); </SPAN>


2、获取系统信息

  1. <SPAN style="FONT-SIZE: 18px">System.out.println(System.getProperty("os.name"));
  2. System.out.println(System.getProperty("os.arch"));
  3. System.out.println(System.getProperty("os.version"));
  4. System.out.println(System.getProperty("file.separator"));
  5. System.out.println(System.getProperty("path.separator"));
  6. System.out.println(System.getProperty("line.separator"));
  7. System.out.println(System.getProperty("user.name"));
  8. System.out.println(System.getProperty("user.home"));
  9. System.out.println(System.getProperty("user.dir")); </SPAN>

JMX 和系统管理

检测虚拟机当前的状态总是 Java 开放人员所关心的,也正是因为如此,出现了大量的 profiler 工具来检测当前的虚拟机状态。从 Java SE 5 之后,在 JDK 中,我们有了一些 Java 的虚拟机检测 API,即 java.lang.management包。Management 包里面包括了许多 MXBean 的接口类和 LockInfo、MemoryUsage、MonitorInfo 和 ThreadInfo 等类。从名字可以看出,该包提供了虚拟机内存分配、垃圾收集(GC)情况、操作系统层、线程调度和共享锁,甚至编译情况的检测机制。这样一来,Java 的开发人员就可以很简单地为自己做一些轻量级的系统检测,来确定当前程序的各种状态,以便随时调整。

要获得这些信息,我们首先通过 java.lang.management.ManagementFactory这个工厂类来获得一系列的 MXBean。包括:

  • ClassLoadingMXBean

    ClassLoadMXBean 包括一些类的装载信息,比如有多少类已经装载 / 卸载(unloaded),虚拟机类装载的 verbose 选项(即命令行中的 Java – verbose:class 选项)是否打开,还可以帮助用户打开 / 关闭该选项。

  • CompilationMXBean

    CompilationMXBean 帮助用户了解当前的编译器和编译情况,该 mxbean 提供的信息不多。

  • GarbageCollectorMXBean

    相对于开放人员对 GC 的关注程度来说,该 mxbean 提供的信息十分有限,仅仅提供了 GC 的次数和 GC 花费总时间的近似值。但是这个包中还提供了三个的内存管理检测类:MemoryManagerMXBean,MemoryMXBean 和 MemoryPoolMXBean。

    • MemoryManagerMXBean

      这个类相对简单,提供了内存管理类和内存池(memory pool)的名字信息。

    • MemoryMXBean

      这个类提供了整个虚拟机中内存的使用情况,包括 Java 堆(heap)和非 Java 堆所占用的内存,提供当前等待 finalize 的对象数量,它甚至可以做 gc(实际上是调用 System.gc)。

    • MemoryPoolMXBean

      该信息提供了大量的信息。在 JVM 中,可能有几个内存池,因此有对应的内存池信息,因此,在工厂类中,getMemoryPoolMXBean() 得到是一个 MemoryPoolMXBean 的 list。每一个 MemoryPoolMXBean 都包含了该内存池的详细信息,如是否可用、当前已使用内存 / 最大使用内存值、以及设置最大内存值等等。

  • OperatingSystemMXBean

    该类提供的是操作系统的简单信息,如构架名称、当前 CPU 数、最近系统负载等。

  • RuntimeMXBean

    运行时信息包括当前虚拟机的名称、提供商、版本号,以及 classpath、bootclasspath 和系统参数等等。

  • ThreadMXBean

    在 Java 这个多线程的系统中,对线程的监控是相当重要的。ThreadMXBean 就是起到这个作用。ThreadMXBean 可以提供的信息包括各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况。从 ThreadMXBean 可以得到某一个线程的 ThreadInfo 对象。这个对象中则包含了这个线程的所有信息。

java.lang.management 和虚拟机的关系

我们知道,management 和底层虚拟机的关系是非常紧密的。其实,有一些的是直接依靠虚拟机提供的公开 API 实现的,比如 JVMTI;而另外一些则不然,很大一块都是由虚拟机底层提供某些不公开的 API / Native Code 提供的。这样的设计方式,保证了 management 包可以提供足够的信息,并且使这些信息的提供又有足够的效率;也使 management 包和底层的联系非常紧密。

Java代码 复制代码 收藏代码
  1. package com.easyway.space.commons.systems;
  2. import java.lang.management.ClassLoadingMXBean;
  3. import java.lang.management.CompilationMXBean;
  4. import java.lang.management.GarbageCollectorMXBean;
  5. import java.lang.management.LockInfo;
  6. import java.lang.management.ManagementFactory;
  7. import java.lang.management.MemoryMXBean;
  8. import java.lang.management.MemoryManagerMXBean;
  9. import java.lang.management.MemoryPoolMXBean;
  10. import java.lang.management.MemoryType;
  11. import java.lang.management.MemoryUsage;
  12. import java.lang.management.MonitorInfo;
  13. import java.lang.management.OperatingSystemMXBean;
  14. import java.lang.management.RuntimeMXBean;
  15. import java.lang.management.ThreadInfo;
  16. import java.lang.management.ThreadMXBean;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.Set;
  20. import java.util.Map.Entry;
  21. /**
  22. * 系统监控工具
  23. * management 和底层虚拟机的关系是非常紧密的。其实,有一些的是直接依靠虚拟机提供的公
  24. * 开 API 实现的,比如 JVMTI;而另外一些则不然,很大一块都是由虚拟机底层提供某些不公开
  25. * 的 API / Native Code 提供的。这样的设计方式,保证了 management 包可以提供足够的信
  26. * 息,并且使这些信息的提供又有足够的效率;也使 management 包和底层的联系非常紧密。
  27. * @author longgangbai
  28. *
  29. */
  30. public class SystemUtils {
  31. /**
  32. *ClassLoadingMXBean ClassLoadMXBean 包括一些类的装载信息,
  33. * 比如有多少类已经装载 / 卸载(unloaded),
  34. * 虚拟机类装载的 verbose 选项(即命令行中的 Java – verbose:class 选项)是否打开,
  35. * 还可以帮助用户打开 / 关闭该选项。
  36. */
  37. public static void getVMClassInformation(){
  38. ClassLoadingMXBean classLoadMXBean=ManagementFactory.getClassLoadingMXBean();
  39. int loadClazzCount=classLoadMXBean.getLoadedClassCount();
  40. System.out.println("加载类的数量:"+loadClazzCount);
  41. long hasloadClazzCount=classLoadMXBean.getTotalLoadedClassCount();
  42. System.out.println("已经加载类的数量:"+hasloadClazzCount);
  43. long hasUnloadClazzCount=classLoadMXBean.getUnloadedClassCount();
  44. System.out.println("尚未加载类的数量:"+hasUnloadClazzCount);
  45. boolean isVerbose=classLoadMXBean.isVerbose();
  46. System.out.println("是否开始加载类信息:"+isVerbose);
  47. //CompilationMXBean 帮助用户了解当前的编译器和编译情况,该 mxbean 提供的信息不多。
  48. CompilationMXBean compilationMXBean=ManagementFactory.getCompilationMXBean();
  49. String jitName=compilationMXBean.getName();
  50. System.out.println("即时编译的名称:"+jitName);
  51. long totalCompileTime=compilationMXBean.getTotalCompilationTime();
  52. System.out.println("总的编译时间:"+totalCompileTime+"/s");
  53. boolean isSupport=compilationMXBean.isCompilationTimeMonitoringSupported();
  54. if(isSupport){
  55. System.out.println("支持即时编译器编译监控");
  56. }else{
  57. System.out.println("不支持即时编译器编译监控");
  58. }
  59. List<GarbageCollectorMXBean> gcMXBeanList=ManagementFactory.getGarbageCollectorMXBeans();
  60. //相对于开放人员对 GC 的关注程度来说,该 mxbean 提供的信息十分有限,仅仅提供了 GC 的次数和 GC 花费总时间的近似值。
  61. for (GarbageCollectorMXBean gcMXBean : gcMXBeanList) {
  62. //内存池名称
  63. String[] poolNames=gcMXBean.getMemoryPoolNames();
  64. for (String poolName : poolNames) {
  65. System.out.println("poolNames="+poolName);
  66. }
  67. }
  68. //提供了内存管理类和内存池(memory pool)的名字信息。
  69. List<MemoryManagerMXBean> memoryMgrMXBeanList=ManagementFactory.getMemoryManagerMXBeans();
  70. //内存管理器的信息
  71. for (MemoryManagerMXBean memoryManagerMXBean : memoryMgrMXBeanList) {
  72. String[] poolNames=memoryManagerMXBean.getMemoryPoolNames();
  73. for (String poolName : poolNames) {
  74. System.out.println("poolNames="+poolName);
  75. }
  76. }
  77. //内存信息
  78. MemoryMXBean memoryMXBean=ManagementFactory.getMemoryMXBean();
  79. //java堆得使用情况信息
  80. MemoryUsage heapMemoryUsage=memoryMXBean.getHeapMemoryUsage();
  81. long usaged=heapMemoryUsage.getUsed();
  82. System.out.println("java 内存堆使用内存:"+usaged);
  83. long maxUsage=heapMemoryUsage.getMax();
  84. System.out.println("java 内存堆最大使用内存:"+maxUsage);
  85. long initUsage=heapMemoryUsage.getInit();
  86. System.out.println("java 内存堆初始化时占用内存:"+initUsage);
  87. List<MemoryPoolMXBean> memoryPoolMXBeanList=ManagementFactory.getMemoryPoolMXBeans();
  88. //该信息提供了大量的信息。在 JVM 中,可能有几个内存池,因此有对应的内存池信息,因此,在工厂类中
  89. //,getMemoryPoolMXBean() 得到是一个 MemoryPoolMXBean 的 list。每一个 MemoryPoolMXBean 都包含
  90. //了该内存池的详细信息,如是否可用、当前已使用内存 / 最大使用内存值、以及设置最大内存值等等。
  91. for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeanList) {
  92. //内存池的名称
  93. String poolName=memoryPoolMXBean.getName();
  94. //内存管理器的名称
  95. String[] memoryMgrNames=memoryPoolMXBean.getMemoryManagerNames();
  96. for (String mgrName : memoryMgrNames) {
  97. System.out.println("内存管理器的名称:"+mgrName);
  98. }
  99. //java JVM最近内存的使用情况
  100. MemoryUsage memoryUsage=memoryPoolMXBean.getCollectionUsage();
  101. System.out.println("内存池的收集器内存使用率:"+memoryUsage.getUsed()/memoryUsage.getMax()+"%");
  102. memoryPoolMXBean.getCollectionUsageThreshold();
  103. memoryPoolMXBean.getCollectionUsageThresholdCount();
  104. MemoryType memoryType=memoryPoolMXBean.getType();
  105. System.out.println("内存的信息:"+memoryType.name());
  106. MemoryUsage memoryUage=memoryPoolMXBean.getUsage();
  107. System.out.println("内存池的内存使用率:"+memoryUage.getUsed()/memoryUage.getMax()+"%");
  108. memoryPoolMXBean.getUsageThreshold();
  109. System.out.println();
  110. memoryPoolMXBean.getUsageThresholdCount();
  111. System.out.println();
  112. }
  113. //该类提供的是操作系统的简单信息,如构架名称、当前 CPU 数、最近系统负载等。
  114. OperatingSystemMXBean operateSystemMBean=ManagementFactory.getOperatingSystemMXBean();
  115. String operateName=operateSystemMBean.getName();
  116. System.out.println("操作系统的名称:"+operateName);
  117. int processListCount=operateSystemMBean.getAvailableProcessors();
  118. System.out.println("操作系统的进程数:"+processListCount);
  119. String osArchName=operateSystemMBean.getArch();//System.getProperty("os.arch");
  120. System.out.println("操作系统的架构:"+osArchName);
  121. double loadAverage=operateSystemMBean.getSystemLoadAverage();
  122. System.out.println("操作系统的负载均衡信息:"+loadAverage);
  123. String versionName=operateSystemMBean.getVersion();//System.getProperty("os.version");
  124. System.out.println("操作系统的版本号码:"+versionName);
  125. //运行时信息包括当前虚拟机的名称、提供商、版本号,以及 classpath、bootclasspath 和系统参数等等。
  126. RuntimeMXBean runtimeMXBean=ManagementFactory.getRuntimeMXBean();
  127. String vmName=runtimeMXBean.getVmName();
  128. System.out.println("虚拟机的名称:"+vmName);
  129. String vmVersion=runtimeMXBean.getVmVersion();
  130. System.out.println("虚拟机的版本:"+vmVersion);
  131. Map<String, String> sysMaps=runtimeMXBean.getSystemProperties();
  132. Set<Entry<String,String>> keyLists=sysMaps.entrySet();
  133. for (Entry<String, String> entry : keyLists) {
  134. System.out.println(entry.getKey()+":"+entry.getValue());
  135. }
  136. String vmVendor=runtimeMXBean.getVmVendor();
  137. System.out.println("系统的供应商的名称:"+vmVendor);
  138. //类加载器的路径
  139. String clazzPath=runtimeMXBean.getClassPath();//System.getProperty("java.class.path")}
  140. System.out.println("操作系统的类加载器的名称:"+clazzPath);
  141. List<String> argsList=runtimeMXBean.getInputArguments();
  142. System.out.println("操作系统的参数信息");
  143. for (String args : argsList) {
  144. System.out.println(" "+args);
  145. }
  146. String libPath=runtimeMXBean.getLibraryPath();// System.getProperty("java.library.path")
  147. System.out.println("java 的类库路径:"+libPath );
  148. String specVersion=runtimeMXBean.getManagementSpecVersion();
  149. System.out.println("实施运行Java虚拟机管理接口规范 的版本"+specVersion);
  150. String specName=runtimeMXBean.getSpecName();
  151. System.out.println("规范的名称:"+specName);
  152. String specVender=runtimeMXBean.getSpecVendor();
  153. System.out.println("规范管理接口供应商 :"+specVender);
  154. long startTime=runtimeMXBean.getStartTime();
  155. System.out.println("java 虚拟机的开始启动的时间:"+startTime);
  156. runtimeMXBean.getSpecVersion();
  157. System.out.println("规范接口版本::"+operateName);
  158. String bottClassPath =runtimeMXBean.getBootClassPath();
  159. System.out.println("操作系统的bootstrap 的classloader:"+bottClassPath);
  160. //在 Java 这个多线程的系统中,对线程的监控是相当重要的。ThreadMXBean 就是起到这个作用。
  161. //ThreadMXBean 可以提供的信息包括各个线程的各种状态,CPU 占用情况,以及整个系统中的线
  162. //程状况。从 ThreadMXBean 可以得到某一个线程的 ThreadInfo 对象。这个对象中则包含了这个
  163. //线程的所有信息。
  164. //线程的信息
  165. ThreadMXBean threadMXBean=ManagementFactory.getThreadMXBean();
  166. //所有的线程的编号
  167. long[] threadIds=threadMXBean.getAllThreadIds();
  168. for (long threadId : threadIds) {
  169. //线程的信息
  170. ThreadInfo threadInfo=threadMXBean.getThreadInfo(threadId);
  171. //线程被阻塞的数量
  172. threadInfo.getBlockedCount();
  173. //被锁定线程的监控信息
  174. MonitorInfo[] monitorInfos=threadInfo.getLockedMonitors();
  175. for (MonitorInfo monitorInfo : monitorInfos) {
  176. int depth=monitorInfo.getLockedStackDepth();
  177. System.out.println("锁定的程度:"+depth);
  178. }
  179. //异步锁定的信息
  180. LockInfo[] lockinfos=threadInfo.getLockedSynchronizers();
  181. //锁定的信息
  182. for (LockInfo lockInfo : lockinfos) {
  183. System.out.println("锁定类的名称:"+lockInfo.getClassName());
  184. }
  185. //线程的名称
  186. String threadName=threadInfo.getThreadName();
  187. System.out.println("线程的名称:"+threadName);
  188. Thread.State state=threadInfo.getThreadState();
  189. System.out.println("线程的信息:"+state.name());
  190. }
  191. long cpuTime=threadMXBean.getCurrentThreadCpuTime();
  192. long curentTime=threadMXBean.getCurrentThreadUserTime();
  193. long threadCount=threadMXBean.getDaemonThreadCount();
  194. long peakliveThreadCount=threadMXBean.getPeakThreadCount();
  195. long threadCounts=threadMXBean.getThreadCount();
  196. System.out.println("当前处于live状态的线程总的数量:"+threadCounts);
  197. long totalThreadCount=threadMXBean.getTotalStartedThreadCount();
  198. System.out.println("JVM 启动之后,总的自动线程数量:"+totalThreadCount);
  199. }
  200. /**
  201. *
  202. * @return
  203. */
  204. public static final String getHeapMemoryUsage() {
  205. ClassLoadingMXBean mxbean;
  206. return ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
  207. .getUsed()
  208. + "/"
  209. + ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
  210. .getMax();
  211. }
  212. /**
  213. * 当前使用内存的百分比
  214. * @return
  215. */
  216. public static final String getHeapMemoryUsagePercent() {
  217. return (((double) ManagementFactory.getMemoryMXBean()
  218. .getHeapMemoryUsage().getUsed() / (double) ManagementFactory
  219. .getMemoryMXBean().getHeapMemoryUsage().getMax()) * 100L)
  220. + "%";
  221. }
  222. /**
  223. * 当前非java堆占用的百分比
  224. * @return
  225. */
  226. public static final String getNonHeapMemoryUsage() {
  227. return ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
  228. .getUsed()
  229. + "/"
  230. + ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
  231. .getMax();
  232. }
  233. /**
  234. *
  235. * @return
  236. */
  237. public static final String getNonHeapMemoryUsagePercent() {
  238. return (((double) ManagementFactory.getMemoryMXBean()
  239. .getNonHeapMemoryUsage().getUsed() / (double) ManagementFactory
  240. .getMemoryMXBean().getNonHeapMemoryUsage().getMax()) * 100)
  241. + "%";
  242. }
  243. /**
  244. * 获取线程数
  245. * @return
  246. */
  247. public static final String getThreadCount() {
  248. return "" + ManagementFactory.getThreadMXBean().getThreadCount();
  249. }
  250. }

猜你喜欢

转载自xiajs.iteye.com/blog/1765701