java.lang.management.ManagementFactory学习

同事前些日子去景德镇某客户那里布测试环境,几个人点系统就出现非堆内存溢出的情况,而且同事反映,他已经对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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值