前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 使用strace命令查找进程卡死原因

Linux 使用strace命令查找进程卡死原因

作者头像
岛哥的质量效能笔记
发布2021-09-14 14:07:22
4.7K0
发布2021-09-14 14:07:22
举报

点击👆小卡片,回复 “合集” 获取系统性的学习笔记和测试开发技能图谱

背景

最近遇到某个线上服务进程卡死的情况,但是在本地调试的过程中又没法复现,需要在线上服务器运行一段时间后在某些条件下才会触发。

定位问题

首先我们用ps auxf命令查看我们的进程执行到了哪一步:

可以看到执行到了[sh]然后就卡死了,然后我们接着通过strace命令来查看执行这个操作死在了哪个系统回调:

代码语言:javascript
复制
root@demo:~# strace -p 6093
Process 6093 attached
recvfrom(5,

可以看到是死在了系统回调recvfrom这里,描述符5的具体含义我们可以进入 /proc/pid/fd 查看:

代码语言:javascript
复制
root@demo:~# cd /proc/6093/fd

root@demo:/proc/6093/fd# ls -l
total 0
lr-x------ 1 root root 64 Jul 14 05:58 0 -> pipe:[675847127]
l-wx------ 1 root root 64 Jul 14 05:58 1 -> pipe:[675847128]
l-wx------ 1 root root 64 Jul 14 05:58 2 -> pipe:[675847128]
lr-x------ 1 root root 64 Jul 14 05:58 3 -> /dev/urandom
lrwx------ 1 root root 64 Jul 14 05:58 4 -> socket:[675848446]
lrwx------ 1 root root 64 Jul 14 05:58 5 -> socket:[675847890]

我们可以发现,5代表的是socket,说明进程是死在socket通讯上了,那么再去排查线上服务器中有哪些服务用到了socket,最后定位到是X服务中大量不合理的使用socket连接导致的,至此问题就定位到了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 岛哥的质量效能笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档