死锁检测方法
1 JConsole 找到需要查看的进程,打开线程选项卡,点击检测死锁
2 jps查看java进程ID,使用jstack 7412输出信息
3 使用jvisualvm连接java虚拟机,查看线程检测死锁
解决方法:
四个条件打破一个即可,但是代价不同,最简单的编码就是顺序加锁和解锁
现在我们介绍下如何避免死锁的几个常见方法。《java变发编程的艺术》
- 避免一个线程同时获取多个锁。
- 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
- 尝试使用定时锁,使用tryLock(timeout)来替代使用内部锁机制。
- 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败。
检测CPU使用过高:http://flysnowxf.iteye.com/blog/1162691
TOP找出Cpu使用高的进程,这里我们分析21125这个java进程。
先输入top -p 21125,然后再按shift+h。这里意思为只查看21125的进程,并且显示线程。
jstack查找这个线程的信息
Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
http://blog.csdn.net/feihong247/article/details/7874063#
jstack
jstack 是一个可以返回在应用程序上运行的各种各样线程的一个完整转储的实用程序,您可以使用它查明问题。jstack [-l] <pid>,jpid可以通过使用jps命令来查看当前Java程序的jpid值,-l是可选参数,它可以显示线程阻塞/死锁情况。