通过top命令和thread dump查看JAVA线程死循环的案例
2014-07-18 16:08
281 查看
这篇文章是由一个面试的问题引出的。面试官问曰:“尔可知如何定位JAVA程序的死循环?”。思虑良久,未有良策,回来查阅了下资料,经过一番曲折感觉自己解决问题的能力又提高了不少。以下是个例子,不一定很合适但足以说明一些问题。
1、查看进程ID:
[resin_access@172 ~]$ jps
3230 jar
2、按CPU使用率展示当前JAVA程序的所有线程:
其实这个地方按CPU的使用率来判定还不太好理解,以运行时间来判定可能更能说明问题些,具体的top命令可参考另外一篇文章(万能的TOP命令)。
3、将运行时间最长的本地线程ID(3244)转成16进制为0xcac。
4、生成线程堆栈日志文件jstack -l 3230 > jstack.log;
5、打开堆栈日志搜索“0xcac”:
很容易的就找到了无限循环的调用线程堆栈。
注:死循环的那几个方法命名不代表任何意义纯粹是随手复制,主要是为了展示调用过程,将就着看看算了。
1、查看进程ID:
[resin_access@172 ~]$ jps
3230 jar
2、按CPU使用率展示当前JAVA程序的所有线程:
其实这个地方按CPU的使用率来判定还不太好理解,以运行时间来判定可能更能说明问题些,具体的top命令可参考另外一篇文章(万能的TOP命令)。
3、将运行时间最长的本地线程ID(3244)转成16进制为0xcac。
4、生成线程堆栈日志文件jstack -l 3230 > jstack.log;
5、打开堆栈日志搜索“0xcac”:
很容易的就找到了无限循环的调用线程堆栈。
注:死循环的那几个方法命名不代表任何意义纯粹是随手复制,主要是为了展示调用过程,将就着看看算了。
相关文章推荐
- JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息
- linux中用top、ps命令查看进程中的线程
- JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息
- Java通过在主循环中判断Boolean来停止线程
- liunx java 查看java项目的线程命令 jstack
- 使用top 命令查看线程的资源占用
- top命令找到占用CPU最高的java线程
- list的add方法 ,foreach循环添加map---List.add(map)(通过一个java爬虫案例说明)
- Java通过在主循环中判断Boolean来停止线程的方法示例
- java生产环境下找出占用CUP较多资源线程 相对定位先用top命令找出占用资源厉害的java进程id
- 通过show processlist命令查看主从库复制线程状态
- Java通过调用Top命令获取Linux的CPU和内存使用情况
- 用 top 命令查看 CPU 使用率
- 用 top 命令查看 CPU 使用率
- 小技巧:查看Java的线程
- Exchange 2007如何通过命令查看所有用户邮箱大小
- 用 top 命令查看 CPU 使用率
- Java牛角尖【008】: 可以通过调用一个线程的run方法启动一个线程吗?
- java线程概念案例
- TOP命令查看CPU信息详解