详细介绍Jconsole和jvisualvm的使用
Jconsole
FROM : http://jiajun.iteye.com/blog/810150
Jconsole是一种基于JMX的可视化监视,管理工具。
启动Jconsole:C:\Oracle\Middleware\jdk160_14_R27.6.5-32\bin 下 双击jconsole.exe
Jconsole 链接本地java进程是灰色的
-Xms100m -Xmx100m -XX:+UseSerialGC
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false
这是因为JVM在启动的时候默认加载参数没有进行设置,设置如下参数后
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
重新打开Jconsole,然后在远程连接下输入127.0.0.1:8011 则可以成功连接,
程序运行期间,Jconsole可以一直监视内存情况,一旦程序运行结束,则连接失败。
运行的程序如下,观察堆的内存变化:
public classHelloWorld {
staticclass OOMObject {
public byte[] placeholder = new byte[64 *1024];
}
publicstatic void fillHeap(int num) throwsInterruptedException {
List<OOMObject> list = new ArrayList<OOMObject>();
for (int i = 0; i < num; i++) {
Thread.sleep(50);
list.add(new OOMObject());
}
System.gc();
}
publicstatic void main(String[] args) throwsInterruptedException {
fillHeap(1000);
}
}
演示Jconsole监视线程运行状态:
public classHelloWorld {
/**
* 线程死循环演示
*/
publicstatic void createBusyThread() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
;
}
}
}, "testBusyThread");
thread.start();
}
/**
* 线程等待演示
* @param lock
*/
publicstatic void createLockThread(final Object lock) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
try {
lock.wait();
} catch(InterruptedException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
}
}, "testLockThread");
thread.start();
}
publicstatic void main(String[] args) throws IOException
{
BufferedReader b = new BufferedReader(newInputStreamReader(System.in));
b.readLine();
createBusyThread();
b.readLine();
Object obj = new Object();
createLockThread(obj);
}
}
运行之后:
看到main线程处于Runnable状态,等待控制台输入,
当输入1之后,可以看到线程testBusyThread线程处于Runnable,且一直停留在17行,也就是while(true)状态
当输入2之后,可以看到testLockThread线程一直在wait中,线程状态也是waiting
二. JvisualVM
启动:C:\Oracle\Middleware\jdk160_14_R27.6.5-32\binjvisualvm.exe
作用: 监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析
使用java自带的jvisualvm---可以找到具体的java进程的id,
如果同时运行多个java程序,则从左边这课树清晰的看到
FROM : http://blog.csdn.net/a19881029/article/details/8432368
https://blog.csdn.net/wulantian/article/details/47777059
程序运行后会自动监控本机运行的java程序
在要监控的程序加入如下参数,由于本地测试时没有安装插件,所以监视的节点比较少
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false