php无限写文件导致服务器卡死,php5.2的curl-bug服务器被php进程卡死问题排查.pdf

php5.2的的curl-bug 服服务务器器被被php进进程程卡卡死死问问题题排排查查

前几天东政同学反馈说Linode服务器快卡死了,今天有时间排查了一 具体原因,最终原因稍微有点悲壮:file_get_contents没

有设置超时时间,加上我用的php5.2关于curl的代码有个bug ,于是导致PHP进程进入死循环。

今天 午又发现系统负载很高,于是上去看了一 ,发现一大坨PHP进程没有退出,占用了很多CPU,如图:

问题进程:

后面运行的脚本是我的RSS定时更新任务,看来PHP代码什么地方有问题,于是strace -p 1 0 3看了一 :

select(5, [4], [4], [], {15, 0}) = 1 (out [4], left {14, 999996})

poll([{fd=4, events=POLLI |POLLPRI}], 1, 0) = 0 (Timeout)

clock_gettime(CLOCK_MO OTO IC, {4582888, 760370017}) = 0

clock_gettime(CLOCK_MO OTO IC, {4582888, 760468615}) = 0

clock_gettime(CLOCK_MO OTO IC, {4582888, 760565053}) = 0

select(5, [4], [4], [], {15, 0}) = 1 (out [4], left {14, 999997})

在4号fd上面死循环了,于是看看FD是什么:ll /proc/ 1 0 3/fd

lrwx―― 1 wuhaiwen wuhaiwen 6 7月 21 11:00 -> socket:

再看了一 原来是在请求CSDN的一个网页的时候死循环了,但不知道什么地方请求的,想到GDB一 php进程看看,bt显示:

(gdb) bt

#0 0x00007f6721f8f013 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:82

#1 0×0000000000 8 1952 in php_curl_stream_read (stream=0×2280650,

buf=0x22ea5d0 “2Fwww .%2Ftag%2F%25e6%25ad%25a3%25e5%2588%2599%27+class%3D%27tag-link-1

9 1%27+title%3D%273+topics%27+style%3D%27font-size%3A +9.02 3902 39pt%3B%27%3E%E6%A D%A 3%E5%88%

99%3C%2Fa%3E%3C%2Ftags%3E\”"…, count=8 192) at /home/wuhaiwen/install/php-env/src/php/php-5.2.8/ext/curl/strea

ms.c:169

#2 0x00000000006738f9 in php_stream_fill_read_buffer (stream=0×2280650, size= 283) at /home/wuhaiwen/install/php-e

nv/src/php/php-5.2.8/main/streams/streams.c:55

#3 0x0000000000673c39 in _php_stream_read (stream=0×2280650,

buf=0x2301fd5 “f='http://www ./tag/j son' class='tag-link-79′ title='3 topics' style='font-size: 9.02 3902 39pt;'>j

son\n

wen/install/php-env/src/php/php-5.2.8/main/streams/streams.c:600

# 0x000000000067 c51 in _php_stream_copy_to_mem (src=0×2280650, buf=0x7fff376ed898, maxlen=,

per

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值