一. jps (java process status)

本地虚拟机唯一id lvmid(local virtual machine id)
-m 运行时传入的主类参数
-v 虚拟机参数
-l 运行时主类全名或jar包名称
二.Jstat
类装载 内存 垃圾收集 jit编译的信息
元空间本质和永久代类似,都是对jvm方法区的实现,不同之处在于,元空间不在虚拟机中,而是使用直接内存。因此,在默认情况下,元空间仅仅受本地内存限制
三.jinfo(实时监控调整虚拟机的参数)
命令行
jinfo -flag UseG1GC 7568
查看虚拟机状态``
+表示启用
-表示禁用

四.jmap

生成堆快照信息

五.jhat
一般不在服务器上使用
六.jstack
生成线程快照,定位线程出现停顿的原因

Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();
Set<Map.Entry<Thread, StackTraceElement[]>> entries = allStackTraces.entrySet();
Iterator<Map.Entry<Thread, StackTraceElement[]>> iterator = entries.iterator();
while (iterator.hasNext()){
Map.Entry<Thread, StackTraceElement[]> next = iterator.next();
System.out.println(next.getKey()+"--------"+next.getValue());
}
七.可视化虚拟机工具
jconsole
public class T5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.nextInt();
new Thread(new Runnable() {
@Override
public void run() {
while (true){
}
}
},"while true").start();
scanner.nextInt();
testWait(new Object());
}
private static void testWait(Object obj){
new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
},"wait").start();
}
}
死锁
public class DeadLock implements Runnable {
private Object obj1;
private Object obj2;
public DeadLock(Object obj1,Object obj2){
this.obj1=obj1;
this.obj2=obj2;
}
@Override
public void run() {
synchronized (obj1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2){
System.out.println("hello");
}
}
}
}
Object o = new Object();
Object o1 = new Object();
new Thread(new DeadLock(o,o1)).start();
new Thread(new DeadLock(o1,o)).start();
八神器 visualvm
下载地址 https://visualvm.github.io/download.html
Java性能监控与故障排查
本文详细介绍Java性能监控工具如jps、jstat、jinfo、jmap、jhat、jstack的功能及使用方法,包括类装载、内存、垃圾收集等信息的监控,以及线程和堆快照的生成。同时,提供了死锁示例代码,帮助理解并解决复杂问题。
1822

被折叠的 条评论
为什么被折叠?



