Beeline 偶尔出现任务进程卡住, 长时间等待无响应的情况.本文记录了进行分析及定位代码位置的思路和方法.
1 问题背景
1 |
|
或
1 | jps |
## 2.2 定位繁忙的线程
1 | top -Hp <pid> |
如下, 看出PID是 117426
1 | top - 17:10:29 up 69 days, 39 min, 3 users, load average: 8.70, 11.67, 10.29 |
## 2.3 抓取服务进程jstack现场并分析
将jstack现场抓取到文件jstack.js中:
1 | jstack -l <pid> > jstack.js |
需要将第三步中繁忙的线程ID转为十六进制:printf "%x\n" 117426
1 | [hadoop@hadoop-server /tmp]$ printf "%x\n" 117426 |
然后在jstack.js中查找该线程信息:
可以看出是在CombineFileInputFormat.getSplits
时hang住了, 这里通常是文件太大导致的.
1 | "Thread-17999" #19884 prio=5 os_prio=0 tid=0x00007f9021c4f800 nid=0x1cab2 runnable [0x00007f9001e74000] |
3 总结
本文的解决思路, 也可用于服务器CPU打满等情况下的快速分析。总体思路是通过top抓取繁忙线程,通过jstack抓取现场。
本文作者:
Jeff.R
本文链接: https://stefanxiepj.github.io/archives/384892e8.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://stefanxiepj.github.io/archives/384892e8.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)