标签:结果 过程 obj 上进 puts hive io操作 finalize zed
查看正在运行的JVM进程
监视虚拟机运行时状态信息,显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等数据
生成heap dump文件,除了这个命令还可以配置-XX:+HeapDumpOnOutOfMemoryError参数让虚拟机出现OOM时自动生成dump文件。此外还能查询finalize执行队列、Java堆和永久代的详细信息、如当前使用率、当前使用的哪种收集器
与jmap搭配使用,分析jmap生成的dump,它内置一个微型的HTTP/HTML服务器,生成dump分析结果后,可以在浏览器中查看。但一般不会直接在服务器上进行分析,因为这是一个很耗时和耗费资源的过程,一般生成dump文件后,复制到本地或其他机器上进行分析
生成java虚拟机当前时刻的线程快照,包括虚拟机内部每一条线程正在执行的方法堆栈的集合,当出现长时间卡顿时,用来分析,是否是线程死锁,死循环,请求外部资源等问题。
NEW,未启动的。不会出现在Dump中
RUNNABLE,在虚拟机内执行的
BLOCKED,受阻塞并等待监视器锁
WAITING,无限等待另一个线程执行特定操作
TIMED_WATING,有时限的等待另一个线程的特定操作
TERMINATED,已退出的
locked<地址> 使用synchronized申请对象锁成功,Monitor的拥有者
waiting to lock<地址> 使用synchronized申请对象锁失败,进入阻塞队列
waiting on <地址> 使用synchronized申请对象锁成功,释放锁在等待集合中等待
parking to wait for <地址> 不通过监视器在对象上阻塞,JUC下比如LockSupport
runnable,状态为RUNNABLE
in Object.wait(),等待区等待,状态为WAITING或TIMED_WAITING
waiting for monitor entry,进入阻塞队列,状态为BLOCKED
waiting on condition,等待一个条件的发生,比如调用Thread.sleep(),或者等待IO
建议大家自己试一下,先jps查看进程id,然后 jstack -l pid_Id 可以看到很多信息
5.4.1 锁竞争
代码:
private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); public static void main(String[] args) { test1(); } //测试锁等待 private static void test1() { new Thread(()->{synchronized (lock1){while(true){}}},"线程1").start(); new Thread(()->{synchronized (lock1){}},"线程2").start(); }
执行结果:
5.4.2 持续运行的IO
IO操作可能导致,线程状态为RUNNABLE,但一直等待。比如堆栈信息中有SocketInputStream或SocketImpl上,socketRead0等IO调用方法,调用栈中包含了jdbc相关包,很可能发生了数据库死锁
5.4.3 死锁
代码:
private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); public static void main(String[] args) { test2(); } //测试死锁 private static void test2() { new Thread(() -> { synchronized (lock1) { try { Thread.sleep(100); } catch (InterruptedException ignore) { //; } synchronized (lock2){} } }, "线程1").start(); new Thread(() -> { synchronized (lock2) { try { Thread.sleep(100); } catch (InterruptedException ignore) { //; } synchronized (lock1){} } }, "线程2").start(); }
执行结果:
还能自己检测到死锁信息
实时查看和调整虚拟机运行参数。
参考:
标签:结果 过程 obj 上进 puts hive io操作 finalize zed
原文地址:https://www.cnblogs.com/walker993/p/14825967.html