sudo strace -p 13793
sudo netstat -tunpa | grep 13793
解决问题
登录机器后执行top命令,果然发现存在一个CPU占用较高的PHP进程,然后执行下列命令,发现存在一个由crontab启动的执行了很长时间的PHP脚本:
由于之前也遇到过PHP脚本执行卡住的类似情况,当时的怀疑是跨机房的Mysql查询在网络抖动时导致Mysql连接卡住了,于是理所当然的将所有卡住的进程都kill掉了,再从负载上看机器马上就恢复正常了,于是心满意足的跑去干别的了。
过了一段时间,刷了下监控,发现问题又出现了,注释掉crontab并kill掉进程后,手动执行问题脚本,竟然能稳定复现问题!看来是把问题想得太简单了,尝试用strace命令看下卡住的进程当前究竟在干什么:
什么输出都没有!再用netstat看下这个进程是否打开了什么端口:
可以看到进程打开了两个端口,分别与Mysql和Redis建立了连接,并且处于连接建立(ESTABLISHED)和对方主动关闭连接(CLOSE_WAIT)的状态;初看确实像是和数据库的连接卡住了,但是因为吃过亏上过当,咱们使用tcpdump抓包看进程和数据库之间的交互:
抓了好一会,~/mysql.cap 文件中却也没有任何输出,难道进程和Mysql之间已经没有任何交互了?那为什么连接建立没有关闭呢?看来只能从头追踪一下脚本的执行情况了:
首先为了能来得及strace到进程,在PHP脚本最开始的时候输出进程的pid并sleep 10s:
然后启动tcpdump准备抓包本机和Mysql的交互过程。
最后执行PHP脚本,并复制输出的pid后在新窗口中执行strace命令。
这下strace和tcpdump都有内容了!从strace结果看recvfrom之后不再有poll,但并没有看出来有什么不对:
再从抓包结果看,执行了两条SQL查询语句之后,进程没有再次发送查询请求的包,从程序记录SQL语句日志中,也发现确实只执行了两条:
相关推荐
最近通过监控发现服务器中的一台机器异常,通过排除发现可能是php执行脚本出现了问题,于是通过一步步排查,最终解决了这个问题,下面这篇文章主要是记录了一次排查PHP脚本执行卡住的问题,需要的朋友可以参考下。
Linux应急响应辅助排查脚本 一键运行导出日志 将该脚本下载并移动到Linux任意文件夹,以root权限运行即可导出result.log辅助快速应急响应主机排查。 可使用此脚本用于分析日常服务器差异及被攻击行为。
https://blog.csdn.net/b379685397/article/details/104444631使用代码,主要用于解决jar包相关问题
Java常见问题排查
web常见问题排查
当前进程的所有的socket句柄、连接的端口如何看等这些恼人的问题,通过阅读"使用netstat命令进行网络问题排查的诀窍",就可以立马找到解决新问题的答案。 本文包含了10个典型的问题及netstat的实际使用方法、实际...
数据库问题排查流程----Oracle_DBA日常工作和职责
jvm问题排查的一个工具手册
美澜视觉检测数据卡显示未连接错误,于是写了数据卡驱动问题排查说明 美澜视觉检测数据卡显示未连接错误,于是写了数据卡驱动问题排查说明 美澜视觉检测数据卡显示未连接错误,于是写了数据卡驱动问题排查说明 ...
Java虚拟机调优及问题排查手册:包括JVM排查、数据库连接排查、堆栈快照排查。Java虚拟机调优及问题排查手册:包括JVM排查、数据库连接排查、堆栈快照排查。
网络排查步骤和方法。很多人都会遇到各种网络的问题,在这里教你怎么排查网络的基本的故障,让你不再迷惑。 觉得好的就下吧。
4G模组 SIM卡无法识别排查解决方案
iNode安装运行故障排查.pdf Portal无感知认证排错.pdf Portal认证页面无法弹出故障排查.pdf WSM射频管理故障排查.pdf WSM无法识别或同步AC故障排查.pdf 备份设备配置文件失败故障排.pdf 拓扑常见问题排查.pdf...
大厂高手骆俊武出品的《漫谈线上问题排查》电子书
生产中Java性能问题排查:请求响应过程、DNS查找过程、请求响应过程
线上问题排查常用命令,包含linux命令,jstat,jinfo,jps等命令
Java诊断利器Arthas排查问题实践.pptx
JAVA线上问题排查和工具 内容详细 结合实际工作 贴合实际
这是一个简陋的“首钢公司双控系统(隐患排查)自动排查程序源代码”框架,分享给同样被这个每天点勾系统折磨的同事们。2019-1-30日测试代码从打开到关闭浏览器整体可用。 整体思路就是使用webdriver与pyautogui...