jconsole - Java 监视与管理控制台

JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对 JMX MBean 进行管理,由于 MBean 可以使用代码、中间件服务器的管理控制台或者所有符合 JMX 规范的软件进行访问。

我们先写一个测试程序运行起来方便监视:

SimpleQueue.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

public class SimpleQueue {


public static void main(String[] args) {
final BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();

Runnable prodTask = () -> {
Random random = new Random();
while (true) {
int num = random.nextInt(1000000);
int mills = random.nextInt(1000);
queue.offer(num);
System.out.println("thread[" + Thread.currentThread().getName() + "] offer " + num + " to queue and then sleep " + mills + " ms");
try {
Thread.sleep(mills);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};

Runnable conTask = () -> {
Random random = new Random();
while (true) {
int mills = random.nextInt(1000);
try {
Integer num = queue.poll(mills, TimeUnit.MILLISECONDS);
System.out.println("thread[" + Thread.currentThread().getName() + "] poll " + num + " with in " + mills + " ms");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};

ExecutorService threadPool = Executors.newFixedThreadPool(4);
threadPool.execute(prodTask);
threadPool.execute(prodTask);
threadPool.execute(conTask);
threadPool.execute(conTask);
}
}

然后打开 JDK/bin 下的 jconsole.exe 启动 JConsole 后,将自动搜索出本机运行的所有虚拟机进程,不需要使用 jps 来查询了,如下所示:

我们双击上面的程序打开监控,从控制面板中我们可以清晰的看到线程、内存等各种监控信息

文章摘自《深入理解Java虚拟机》第二版 周志明著,仅作为学习记录,书籍中用到的案例代码及描述有部分修改,但未改变原意。