监控应用程序堆栈的方法

1 可以使用jdk自带的jconsole工具

2 可以使用ip+端口

/*
* host: 远程机器的ip地址 port: 远程java进程运行的jmxremote端口
*/
JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8080/jmxrmi");
JMXConnector conn = JMXConnectorFactory.connect(serviceURL);
MBeanServerConnection mbs = conn.getMBeanServerConnection();

// 获取远程memorymxbean
MemoryMXBean memBean = ManagementFactory.newPlatformMXBeanProxy(mbs, ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class);
// 获取远程opretingsystemmxbean
OperatingSystemMXBean opMXbean = ManagementFactory.newPlatformMXBeanProxy(mbs,
ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME, OperatingSystemMXBean.class);

MemoryUsage heap = memBean.getHeapMemoryUsage();
MemoryUsage nonHeap = memBean.getNonHeapMemoryUsage();
long heapSizeUsed = heap.getUsed();// 堆使用的大小
long nonHeapSizeUsed = nonHeap.getUsed();
long heapCommitedSize = heap.getCommitted();
long nonHeapCommitedSize = nonHeap.getCommitted();

3 通过进程ID

public class ExecuteCmd {
/**
* 执行外部程序,并获取标准输出
*/
public static String execute(String[] cmd,String... encoding) {
BufferedReader bufferedReader;
InputStreamReader inputStreamReader;
try {
Process p = Runtime.getRuntime().exec(cmd);

/* 为"错误输出流"单独开一个线程读取之,否则会造成标准输出流的阻塞 */
Thread t = new Thread(new InputStreamRunnable(p.getErrorStream(), "ErrorStream"));
t.start();

/* "标准输出流"就在当前方法中读取 */
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());

if (encoding != null && encoding.length != 0) {
inputStreamReader = new InputStreamReader(bis, encoding[0]);// 设置编码方式
} else {
inputStreamReader = new InputStreamReader(bis, "utf-8");
}
bufferedReader = new BufferedReader(inputStreamReader);

StringBuilder sb = new StringBuilder();
String line;

while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}

bufferedReader.close();
p.destroy();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}

/**
* 堆内存信息
* @param id
* @return
*/
public static List<KVEntity> jstatGc(String id) throws Exception {
return jstat(new String[]{"jstat", "-gc", id});
}

猜你喜欢

转载自www.cnblogs.com/dengw125792/p/12505027.html
今日推荐