Java应用调试工具之jstack
?? 本文经历的事情发生在2008年
?? 本人比较懒,碰到问题才会想到去解决, 一次偶然的机会,发现线上环境的tomcat自从把连接方式改成nio以后,时不时的发现有服务器CPU占用100%的情况。很奇怪的现象,为整个系统带来了不稳定因素,需要尽快解决。于是去网上查找资料,但是没有找到现成的答案。
?? 定下心来自己分析,先需要知道tomcat中的线程在干什么,于是找到了jstack命令。
????
??? 使用linux自带的ps命令:ps -eL -o pid,%cpu,lwp|grep -i 16907?
??? 列出子线程的cpu占用率等情况,再对照jstack命令得到的线程号,就可以知道cpu占用高的线程执行到了那里。
??? 通过这种方式,确定了是由于tomcat的nio用到了jdk6的nio包,命中了其中的一个死锁bug。apache组织的人也建议在高并发的情况下不要开启nio.?
???? 在生产环境中,jstack命令帮助解决了内存泄露引起的垃圾回收线程占用高CPU, 以及服务线程阻塞在某个远程接口处导致无响应等问题。
?
???? 希望这篇文章可以帮助到大家解决更多问题,谢谢!
?