202102-28 jstack+jdb命令查看线程及死锁堆栈信息的实例 如果程序挂死,有时使用jstack查看进程中线程信息时,需要添加上-F参数,此时如果有死锁信息,则可能不会打印出死锁堆栈信息,使用jdb则可以查看当前死锁线程的运行堆栈。如下模拟一个简单的死锁程序packagecom.demo.bootdemo;importjava.util.HashMap;importjava.util.Map;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.springframewor... 继续阅读 >
202010-10 JVM---jstack分析Java线程CPU占用,线程死锁的解决 本文章主要演示在Windows环境,Linux环境也差不多。一、分析CPU占用飙高首先写一个Java程序,并模拟一个死循环。让CPU使用率飙高。CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一。下面是我这里的Controller,启动程序之后,开多个请求访问这个方法。死循环代码就不贴了,自己构造。我这里模拟的一个截取字符串的死循环。/***演示死循环导致cpu使用率飙高**/@RequestMapping("/loop")p... 继续阅读 >
202010-08 如何通过jstack命令dump线程信息 锁是个非常有用的工具,运用场景非常多,因为它使用起来非常简单,而且易于理解。但同时它也会带来一些困扰,那就是可能会引起死锁,一旦产生死锁,就会造成系统功能不可用。让我们先来看一段代码,这段代码会引起死锁,使线程t1和线程t2互相等待对方释放锁。classDeadLockDemo{privatestaticStringA="A";privatestaticStringB="B";publicstaticvoidmain(String[]args){newDeadLockDemo().deadLock();... 继续阅读 >