在java代码中获取JVM参数(转)

时间:2024-01-21 09:38:21

近日关注性能调优,关注JMX,发现java.lang.management.*之强大。同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考:

  1. MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean();
  2. MemoryUsage usage = memorymbean.getHeapMemoryUsage();
  3. System.out.println("INIT HEAP: " + usage.getInit());
  4. System.out.println("MAX HEAP: " + usage.getMax());
  5. System.out.println("USE HEAP: " + usage.getUsed());
  6. System.out.println("\nFull Information:");
  7. System.out.println("Heap Memory Usage: "
  8. + memorymbean.getHeapMemoryUsage());
  9. System.out.println("Non-Heap Memory Usage: "
  10. + memorymbean.getNonHeapMemoryUsage());
  11. List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
  12. System.out.println("===================java options=============== ");
  13. System.out.println(inputArguments);
  14. System.out.println("=======================通过java来获取相关系统状态============================ ");
  15. int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位
  16. System.out.println("总的内存量 i is "+i);
  17. int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量
  18. System.out.println("空闲内存量 j is "+j);
  19. System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024);
  20. System.out.println("=======================OperatingSystemMXBean============================ ");
  21. OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
  22. //    System.out.println(osm.getFreeSwapSpaceSize()/1024);
  23. //    System.out.println(osm.getFreePhysicalMemorySize()/1024);
  24. //    System.out.println(osm.getTotalPhysicalMemorySize()/1024);
  25. //获取操作系统相关信息
  26. System.out.println("osm.getArch() "+osm.getArch());
  27. System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());
  28. //System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());
  29. System.out.println("osm.getName() "+osm.getName());
  30. //System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());
  31. System.out.println("osm.getVersion() "+osm.getVersion());
  32. //获取整个虚拟机内存使用情况
  33. System.out.println("=======================MemoryMXBean============================ ");
  34. MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();
  35. System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());
  36. System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());
  37. //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况
  38. System.out.println("=======================ThreadMXBean============================ ");
  39. ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();
  40. System.out.println("getThreadCount "+tm.getThreadCount());
  41. System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());
  42. System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());
  43. System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());
  44. System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());
  45. //当前编译器情况
  46. System.out.println("=======================CompilationMXBean============================ ");
  47. CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();
  48. System.out.println("getName "+gm.getName());
  49. System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());
  50. //获取多个内存池的使用情况
  51. System.out.println("=======================MemoryPoolMXBean============================ ");
  52. List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();
  53. for(MemoryPoolMXBean mpm:mpmList){
  54. System.out.println("getUsage "+mpm.getUsage());
  55. System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());
  56. }
  57. //获取GC的次数以及花费时间之类的信息
  58. System.out.println("=======================MemoryPoolMXBean============================ ");
  59. List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();
  60. for(GarbageCollectorMXBean gcm:gcmList){
  61. System.out.println("getName "+gcm.getName());
  62. System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());
  63. }
  64. //获取运行时信息
  65. System.out.println("=======================RuntimeMXBean============================ ");
  66. RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();
  67. System.out.println("getClassPath "+rmb.getClassPath());
  68. System.out.println("getLibraryPath "+rmb.getLibraryPath());
  69. System.out.println("getVmVersion "+rmb.getVmVersion());

运行结果如下:

  1. INIT HEAP: 268435456
  2. MAX HEAP: 1065484288
  3. USE HEAP: 331632
  4. Full Information:
  5. Heap Memory Usage: init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K)
  6. Non-Heap Memory Usage: init = 134381568(131232K) used = 2607888(2546K) committed = 134709248(131552K) max = 570425344(557056K)
  7. ==========java options=====
  8. [-Xms256m, -Xmx1024m, -XX:PermSize=128M, -XX:MaxPermSize=512m, -Dfile.encoding=UTF-8]
  9. =======================通过java来获取相关系统状态============================
  10. 总的内存量 i is 260160
  11. 空闲内存量 j is 259836
  12. 最大内存量 is 1040512
  13. =======================OperatingSystemMXBean============================
  14. osm.getArch() x86
  15. osm.getAvailableProcessors() 2
  16. osm.getName() Windows 7
  17. osm.getVersion() 6.1
  18. =======================MemoryMXBean============================
  19. getHeapMemoryUsage init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K)
  20. getNonHeapMemoryUsage init = 134381568(131232K) used = 2638064(2576K) committed = 134709248(131552K) max = 570425344(557056K)
  21. =======================ThreadMXBean============================
  22. getThreadCount 5
  23. getPeakThreadCount 5
  24. getCurrentThreadCpuTime 93600600
  25. getDaemonThreadCount 4
  26. getCurrentThreadUserTime 31200200
  27. =======================CompilationMXBean============================
  28. getName HotSpot Client Compiler
  29. getTotalCompilationTime 1
  30. =======================MemoryPoolMXBean============================
  31. getUsage init = 163840(160K) used = 473920(462K) committed = 491520(480K) max = 33554432(32768K)
  32. getMemoryManagerNames [Ljava.lang.String;@15b7986
  33. getUsage init = 16580608(16192K) used = 331632(323K) committed = 16580608(16192K) max = 66060288(64512K)
  34. getMemoryManagerNames [Ljava.lang.String;@1d9dc39
  35. getUsage init = 2031616(1984K) used = 0(0K) committed = 2031616(1984K) max = 8257536(8064K)
  36. getMemoryManagerNames [Ljava.lang.String;@93dcd
  37. getUsage init = 247791616(241984K) used = 0(0K) committed = 247791616(241984K) max = 991166464(967936K)
  38. getMemoryManagerNames [Ljava.lang.String;@b89838
  39. getUsage init = 134217728(131072K) used = 2213312(2161K) committed = 134217728(131072K) max = 536870912(524288K)
  40. getMemoryManagerNames [Ljava.lang.String;@111a3ac
  41. =======================MemoryPoolMXBean============================
  42. getName Copy
  43. getMemoryPoolNames [Ljava.lang.String;@110b053
  44. getName MarkSweepCompact
  45. getMemoryPoolNames [Ljava.lang.String;@a83b8a
  46. =======================RuntimeMXBean============================
  47. getClassPath E:\workspaces\mss-workspace\Jmx\bin;E:\workspaces\mss-workspace\Jmx\lib\jmxtools.jar
  48. getLibraryPath C:\Program Files (x86)\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;d:\oracle\product\10.2.0\client_2\bin;d:\oracle\product\10.2.0\client_1;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\SWTOOLS\ReadyApps;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_14\bin;C:\Program Files (x86)\Java\jdk1.6.0_14\jre\bin;
  49. getVmVersion 14.0-b16

http://cn-done.iteye.com/blog/2041971