当前位置:   article > 正文

java.lang.management.ManagementFactory学习

java.lang.management

同事前些日子去景德镇某客户那里布测试环境,几个人点系统就出现非堆内存溢出的情况,而且同事反映,他已经对tomcat进行优化了,但是仍然无济于事。

后来回公司重现了现场的错误,是因为他把tomcat加到windows服务列表中,而优化的参数写在catalina.bat中,优化没有生效。

jvisualvm.exe是jdk提供的一款jvm监控软件,能够查看jvm启动的参数和各类内存的使用状况,在JDK6.0update7后自带,可是同事不会使大哭

我就想在自己系统里也加一个这个功能,只简单的显示一些参数信息,用到了java.lang.management.*这个包下的内容。


定义获取的信息bean

  1. import java.lang.management.MemoryUsage;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.commons.lang.builder.ToStringBuilder;
  6. /**
  7. * @author lisen
  8. * @date 2013-11-22 上午09:23:30
  9. */
  10. public class SystemInfoBean {
  11. // 加载类的数量
  12. private int loadClazzCount;
  13. // 已经加载类的数量
  14. private long hasloadClazzCount;
  15. // 尚未加载类的数量
  16. private long hasUnloadClazzCount;
  17. // 堆内存信息
  18. private MemoryUsage heapMemoryUsage;
  19. // 非堆内存信息
  20. private MemoryUsage nonHeapMemoryUsage;
  21. // 操作系统的名称
  22. private String operateName;
  23. // 操作系统的进程数
  24. private int processListCount;
  25. // 操作系统的架构
  26. private String archName;
  27. // 操作系统的版本号码
  28. private String versionName;
  29. // 虚拟机的名称
  30. private String vmName;
  31. // 虚拟机的版本
  32. private String vmVersion;
  33. // 系统的供应商的名称
  34. private String vmVendor;
  35. // JVM启动时间
  36. private Date startTime;
  37. // 输入参数
  38. private List<String> arguments;
  39. // 系统参数
  40. private Map<String, String> systemProperties;
  41. //setter and getter...
  42. }

获取信息的工具类

  1. import java.lang.management.ClassLoadingMXBean;
  2. import java.lang.management.ManagementFactory;
  3. import java.lang.management.MemoryMXBean;
  4. import java.lang.management.OperatingSystemMXBean;
  5. import java.lang.management.RuntimeMXBean;
  6. import java.util.Date;
  7. /**
  8.  * @author lisen
  9.  * @date 2013-11-22 上午09:27:03
  10.  */
  11. public class SystemInfoUtils {
  12.     private SystemInfoBean infoBean = null;
  13.     private static class SingletonClassInstance {
  14.         private static final SystemInfoUtils instance = new SystemInfoUtils();
  15.     }
  16.     public static SystemInfoUtils getInstance() {
  17.         return SingletonClassInstance.instance;
  18.     }
  19.     private SystemInfoUtils() {
  20.         infoBean = new SystemInfoBean();
  21.         // 操作系统信息
  22.         OperatingSystemMXBean operateSystemMBean = ManagementFactory
  23.                 .getOperatingSystemMXBean();
  24.         String operateName = operateSystemMBean.getName();
  25.         infoBean.setOperateName(operateName);
  26.         int processListCount = operateSystemMBean.getAvailableProcessors();
  27.         infoBean.setProcessListCount(processListCount);
  28.         String archName = operateSystemMBean.getArch();// System.getProperty("os.arch");
  29.         infoBean.setArchName(archName);
  30.         String versionName = operateSystemMBean.getVersion();// System.getProperty("os.version");
  31.         infoBean.setVersionName(versionName);
  32.         // 运行时信息
  33.         RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
  34.         String vmName = runtimeMXBean.getVmName();
  35.         infoBean.setVmName(vmName);
  36.         String vmVersion = runtimeMXBean.getVmVersion();
  37.         // infoBean.setVmVersion(vmVersion);
  38.         infoBean.setVmVersion(System.getProperty("java.version") + " ("
  39.                 + vmVersion + ")");
  40.         String vmVendor = runtimeMXBean.getVmVendor();
  41.         infoBean.setVmVendor(vmVendor);
  42.         long startTime = runtimeMXBean.getStartTime();
  43.         infoBean.setStartTime(new Date(startTime));
  44.         infoBean.setArguments(runtimeMXBean.getInputArguments());
  45.         infoBean.setSystemProperties(runtimeMXBean.getSystemProperties());
  46.     }
  47.     public SystemInfoBean getSystemInfo() {
  48.         // 类信息
  49.         ClassLoadingMXBean classLoadMXBean = ManagementFactory
  50.                 .getClassLoadingMXBean();
  51.         int loadClazzCount = classLoadMXBean.getLoadedClassCount();
  52.         infoBean.setLoadClazzCount(loadClazzCount);
  53.         long hasloadClazzCount = classLoadMXBean.getTotalLoadedClassCount();
  54.         infoBean.setHasloadClazzCount(hasloadClazzCount);
  55.         long hasUnloadClazzCount = classLoadMXBean.getUnloadedClassCount();
  56.         infoBean.setHasUnloadClazzCount(hasUnloadClazzCount);
  57.         // 内存
  58.         MemoryMXBean memoryUsage = ManagementFactory.getMemoryMXBean();
  59.         infoBean.setHeapMemoryUsage(memoryUsage.getHeapMemoryUsage());
  60.         infoBean.setNonHeapMemoryUsage(memoryUsage.getNonHeapMemoryUsage());
  61.         return infoBean;
  62.     }
  63. }


效果图



参考http://blog.csdn.net/zhongweijian/article/details/7619383

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/319746
推荐阅读
相关标签
  

闽ICP备14008679号