`

通过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. }

 

 

分享到:
评论

相关推荐

    JVM调优工具命令详解.pdf

    本篇文档详细介绍了JVM调优工具的命令使用及其相关知识点,涵盖了内存信息分析、死锁检测、JMX远程监控等方面的命令行工具的使用方法。 首先,文档提到了JPS命令,它用于查看当前运行的Java进程信息,并返回进程ID...

    基于(siger)开发的SpringBoot项目,java获取服务器信息.zip

    这个项目的主要目标是演示如何利用Java编程语言在SpringBoot环境中获取服务器的相关信息。下面将详细阐述SpringBoot、Siger以及如何在Java中获取服务器信息。 SpringBoot是由Pivotal团队提供的全新框架,其设计目的...

    springboot监控服务器基本信息代码工具包

    内容:Java代码,获取服务器的基本信息(内存,cpu,存储状态等) 适用场景:服务器均可适用,主要是监测服务器的使用状态。 使用方法: 1.添加工程依赖 &lt;!-- 获取系统信息 --&gt; &lt;groupId&gt;...

    Java虚拟机(JVM)参数配置说明.doc

    #### 获取JVM命令配置信息的方法 在了解具体参数之前,首先需要知道如何查看可用的JVM参数及其说明。以下是在Windows平台上的示例步骤: 1. **打开CMD命令提示符**:点击开始菜单 -&gt; 所有程序 -&gt; Java -&gt; Java SDK ...

    SpringBoot结合Sigar获取服务器监控信息源代码

    SpringBoot结合Sigar获取服务器监控信息提供restful接口的源代码, 并使用swagger生成接口文档, 包括 CPU信息,服务器基本信息,内存信息, JVM信息,磁盘信息等. 有详细的代码注释.

    使用RMI远程连接JVM.用JMX获取JVM的参数

    本文将深入探讨如何利用RMI远程连接到Java虚拟机(JVM),并通过JMX获取JVM的相关参数。 RMI是Java提供的一种机制,允许在不同JVM之间透明地调用对象的方法,就像这些对象都在同一台机器上一样。RMI的核心组件包括...

    Jvm堆栈dump文件分析

    1. **获取dump文件**:当JVM出现问题时,通过JVM的命令行选项(如`-XX:+HeapDumpOnOutOfMemoryError`)或者使用如`jmap`命令生成heap dump文件。 2. **安装HeadAnalyzer**:解压`ha414.jar`文件,这是一个包含...

    JVM堆栈性能分析.pdf

    尽管不同JVM打印的Thread Dump可能略有差异,但它们通常提供了当前所有活动线程的状态信息以及JVM中所有Java线程的堆栈跟踪详情。这些堆栈信息包括完整的类名、执行的方法以及可能的源代码行号。 **1.2 Thread Dump...

    JVM调优工具11.pdf

    文档中的示例代码通过创建两个线程同时获取两个不同的锁,演示了如何制造一个死锁的场景。然后使用jstack加上进程id来查找死锁的线程。通过这种方式,我们可以识别出Java应用中的死锁问题。 在远程监控方面,JMX...

    java读取服务器硬件信息(windowx+linux+Mac OS)

    Java通过Java虚拟机(JVM)在不同的操作系统上运行,使得开发者可以使用相同的代码库来处理各种硬件信息。 在Windows环境下,Java可以通过Java Native Interface (JNI) 来调用本地API,如Kernel32.dll中的函数,...

    java 查看JVM中所有的线程的活动状况

    要查看JVM中的线程信息,可以使用`ThreadMXBean`的静态工厂方法`ManagementFactory.getThreadMXBean()`获取实例,然后调用相关方法。以下是一个简单的示例代码(参考文件`ThreadAction.java`): ```java import ...

    Tomcat教程-JVM相关工具.docx

    通过不同的参数,我们可以获取更多详细信息: - `-q`:只显示进程ID。 - `-v`:显示每个进程启动时传递给JVM的命令行参数。 - `-m`:显示传递给main方法的参数。 - `-l`:显示main类或jar的完全限定名称。 ...

    独立进程JVM设置.doc

    首先,获取服务器的实际物理内存值至关重要。在Linux环境中,可以通过执行`cat /proc/meminfo | grep MemTotal`命令来获取,单位为KB。了解服务器的总内存有助于合理分配各个Java进程的资源。 其次,需要识别服务器...

    java利用JMX做出不一样的的JVM.docx

    JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持动态调整日志级别,例如log4j可以通过JMX接口在线调整日志级别。 JMX不仅仅是一个规范,它同时提供了一个框架,...

    基于(siger)开发的SpringBoot项目,java获取服务器信息+源代码+文档说明

    **基于(siger)开发的SpringBoot项目,java获取服务器信息** 该项目为 Java探针 运行前提是 有Jvm环境,集成了Swagger接口 **场景:** 在没有使用 **分布式**的项目,进行集群管理时,有时候来了做服务器监控的...

    hyperic-sigar获取jdk所在服务器状态信息(含代码).rar

    总结来说,Hyperic Sigar是一个强大且灵活的系统监控工具,通过其Java API我们可以轻松获取服务器的各种状态信息,这对于管理和监控Java应用是非常有价值的。在实际项目中,结合日志分析、性能测试等手段,可以更好...

    Java 服务器信息监控

    通过这些信息,我们可以监控内存使用情况,防止内存泄漏,并适时调整JVM的内存配置。 网络监控通常涉及网络接口的带宽使用、连接状态和错误统计。在Java中,`java.net`包提供了`Socket`和`ServerSocket`类用于创建...

    jvm内存参数调优

    其中`libname`为本地代理库文件名,如`hprof`,可用于获取JVM的运行情况,包括CPU、内存、线程等运行数据,并可以输出到指定文件中。`options`是传递给本地库的参数,多个参数间用逗号分隔。在不同的操作系统上,...

    java基础之JVM

    2. **通过网络下载**:从远程服务器获取.class文件。 3. **从压缩文件加载**:如从ZIP或JAR文件中加载。 4. **从特定数据库中提取**:针对某些应用场景,如从专用数据库中提取.class文件。 5. **动态编译**:在运行...

Global site tag (gtag.js) - Google Analytics