JStack 处理线程死锁和等待问题

JStack 处理线程死锁和等待问题

eclipse运行程序,没有使用调试模式,程序运行了一小时后,结果发现程序不在处理任务,此时在Eclipse里面没法再attach到进程上。终止程序又会失去找到问题的机会,怎么办呢。

JDK中带了一些工具,可以帮助调试。jstack就是其中的一个。
首先在任务管理器中(linux/mac osx可以使用ps)找到应用的进程id, 这里假设为1000;
然后在命令行(或终端)执行: jstack -l 1000

然后控制台就会输出各个线程的栈信息和线程的运行状态。
然后就知道哪个线程在运行,哪个线程在Sleep,哪个线程再Wait。
如果代码带有编译信息,还可以找到源代码的行号。

解决进程问题 so easy.