CLI下php进程假死问题排查


首先通过strace命令跟踪假死进程的系统调用信息

strace -p 16618

执行以上命令后,得到如下结果

poll([{fd=33, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=33, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=33, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=33, events=POLLOUT}], 1, 1000) = 0 (Timeout)

Tips: 通过命令man poll可以查看poll系统调用的函数原型

发现当前进程占用了33的文件描述符,接着可以通过下面的命令列出占用该文件描述符的进程

lsof -d 33 | grep php

得到如下结果

php     16618 root   33u  IPv4             987105      0t0   TCP iZbp10yq5syyio54pew3swZ:56030->192.168.110.2:http (SYN_SENT)

可以看到当前进程正在进行http请求,并且处于SYN_SENT的状态 (长期处于该状态),最后猜想可能是由于curl没有设置超时时间,服务器没有及时反应或无法响应的情况下造成了假死现象。

经过调整之后,进程运行正常。

码字很辛苦,转载请注明来自 雨林寒舍《CLI下php进程假死问题排查》


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM