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