赞
踩
同事前些日子去景德镇某客户那里布测试环境,几个人点系统就出现非堆内存溢出的情况,而且同事反映,他已经对tomcat进行优化了,但是仍然无济于事。
后来回公司重现了现场的错误,是因为他把tomcat加到windows服务列表中,而优化的参数写在catalina.bat中,优化没有生效。
jvisualvm.exe是jdk提供的一款jvm监控软件,能够查看jvm启动的参数和各类内存的使用状况,在JDK6.0update7后自带,可是同事不会使
我就想在自己系统里也加一个这个功能,只简单的显示一些参数信息,用到了java.lang.management.*这个包下的内容。
定义获取的信息bean
- import java.lang.management.MemoryUsage;
- import java.util.Date;
- import java.util.List;
- import java.util.Map;
-
- import org.apache.commons.lang.builder.ToStringBuilder;
-
- /**
- * @author lisen
- * @date 2013-11-22 上午09:23:30
- */
- public class SystemInfoBean {
- // 加载类的数量
- private int loadClazzCount;
- // 已经加载类的数量
- private long hasloadClazzCount;
- // 尚未加载类的数量
- private long hasUnloadClazzCount;
- // 堆内存信息
- private MemoryUsage heapMemoryUsage;
- // 非堆内存信息
- private MemoryUsage nonHeapMemoryUsage;
- // 操作系统的名称
- private String operateName;
- // 操作系统的进程数
- private int processListCount;
- // 操作系统的架构
- private String archName;
- // 操作系统的版本号码
- private String versionName;
- // 虚拟机的名称
- private String vmName;
- // 虚拟机的版本
- private String vmVersion;
- // 系统的供应商的名称
- private String vmVendor;
- // JVM启动时间
- private Date startTime;
- // 输入参数
- private List<String> arguments;
- // 系统参数
- private Map<String, String> systemProperties;
-
- //setter and getter...
- }

- import java.lang.management.ClassLoadingMXBean;
- import java.lang.management.ManagementFactory;
- import java.lang.management.MemoryMXBean;
- import java.lang.management.OperatingSystemMXBean;
- import java.lang.management.RuntimeMXBean;
- import java.util.Date;
-
- /**
- * @author lisen
- * @date 2013-11-22 上午09:27:03
- */
- public class SystemInfoUtils {
-
- private SystemInfoBean infoBean = null;
-
- private static class SingletonClassInstance {
- private static final SystemInfoUtils instance = new SystemInfoUtils();
- }
-
- public static SystemInfoUtils getInstance() {
- return SingletonClassInstance.instance;
- }
-
- private SystemInfoUtils() {
- infoBean = new SystemInfoBean();
-
- // 操作系统信息
- OperatingSystemMXBean operateSystemMBean = ManagementFactory
- .getOperatingSystemMXBean();
- String operateName = operateSystemMBean.getName();
- infoBean.setOperateName(operateName);
- int processListCount = operateSystemMBean.getAvailableProcessors();
- infoBean.setProcessListCount(processListCount);
- String archName = operateSystemMBean.getArch();// System.getProperty("os.arch");
- infoBean.setArchName(archName);
- String versionName = operateSystemMBean.getVersion();// System.getProperty("os.version");
- infoBean.setVersionName(versionName);
-
- // 运行时信息
- RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
- String vmName = runtimeMXBean.getVmName();
- infoBean.setVmName(vmName);
- String vmVersion = runtimeMXBean.getVmVersion();
- // infoBean.setVmVersion(vmVersion);
- infoBean.setVmVersion(System.getProperty("java.version") + " ("
- + vmVersion + ")");
- String vmVendor = runtimeMXBean.getVmVendor();
- infoBean.setVmVendor(vmVendor);
- long startTime = runtimeMXBean.getStartTime();
- infoBean.setStartTime(new Date(startTime));
-
- infoBean.setArguments(runtimeMXBean.getInputArguments());
- infoBean.setSystemProperties(runtimeMXBean.getSystemProperties());
- }
-
- public SystemInfoBean getSystemInfo() {
- // 类信息
- ClassLoadingMXBean classLoadMXBean = ManagementFactory
- .getClassLoadingMXBean();
- int loadClazzCount = classLoadMXBean.getLoadedClassCount();
- infoBean.setLoadClazzCount(loadClazzCount);
- long hasloadClazzCount = classLoadMXBean.getTotalLoadedClassCount();
- infoBean.setHasloadClazzCount(hasloadClazzCount);
- long hasUnloadClazzCount = classLoadMXBean.getUnloadedClassCount();
- infoBean.setHasUnloadClazzCount(hasUnloadClazzCount);
-
- // 内存
- MemoryMXBean memoryUsage = ManagementFactory.getMemoryMXBean();
- infoBean.setHeapMemoryUsage(memoryUsage.getHeapMemoryUsage());
- infoBean.setNonHeapMemoryUsage(memoryUsage.getNonHeapMemoryUsage());
- return infoBean;
- }
- }

参考http://blog.csdn.net/zhongweijian/article/details/7619383
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。