原文:http://vearne.cc/archives/297
引子:
我这里说的hang住,并不是指死锁,在真实的工作场景中,死锁的情况其实并不很多见。在我工作的几年中,有遇到好几次都是程序hang在某个IO请求上的。
1. 排查
排查hang住的最有用的命令是strace和lsof命令
比如我们有一个服务叫 atm-client
1.1 首先查出服务对应的进程
ps -ef| grep atm-client| grep -v grep
输出结果
root 5 1 0 2017 ? 01:05:39 atm-client
1.2 对于多线程的程序可以先列出进程的所有线程
ps -mp 5 -o THREAD,tid
输出结果
USER %CPU PRI SCNT WCHAN USER SYSTEM TID root 0.3 - - - - - - root 0.0 19 - poll_s - - 5 root 0.0 19 - sk_wai - - 11 root 0.0 19 - sk_wai - - 12 root 0.0 19 - sk_wai - - 13 root 0.0 19 - sk_wai - - 14 root 0.0 19 - sk_wai - - 15 root 0.0 19 - sk_wai - - 16 root 0.0 19 - sk_wai - - 17 root 0.0 19 - sk_wai - - 18 root 0.0 19 - sk_wai - - 19 root 0.0 19 - sk_wai - - 20 root 0.0 19 - sk_wai - - 21

本文介绍了如何排查和解决程序挂起的问题,重点讨论了strace和lsof命令在查找进程和线程状态中的应用。文章通过实例展示了程序在Redis和HTTP请求上挂起的场景,并给出了Python中设置超时的解决方案,分析了反向代理可能导致挂起的原因。
最低0.47元/天 解锁文章
414

被折叠的 条评论
为什么被折叠?



