PHP Curl随机挂起,没有错误

时间:2015-02-20 10:09:53

标签: curl openssl ubuntu-14.04 hang php-5.5

问题出在开发人员,系统管理员和遇到此问题的人身上。 任何帮助将不胜感激。

我有 4运行php脚本,执行curl以从网站获取标题。一段时间后脚本挂起(并非所有时间都在同一时间)。我确信100%的每个脚本根据我的日志在curl_exec()函数后挂起。

  • 我有curl_close()
  • CURLOPT_CONNECTTIMEOUT = 120
  • CURLOPT_TIMEOUT = 120
  • CURLOPT_FORBID_REUSE = true - 完成时显式关闭
  • CURLOPT_SSL_VERIFYPEER = false
  • CURLOPT_SSL_VERIFYHOST = false

说实话我用参数进行了很多实验,看起来根本没用。此外,将stderr重定向到文件的详细模式不是解决方案,因为它在curl中间挂起并且永远不会到达执行结束。没有日志可以应用于在php内部卷曲。

但我做了一些系统检查

$ sudo strace -p 8824
poll([{fd=5, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {124050, 654708486}) = 0
clock_gettime(CLOCK_MONOTONIC, {124050, 654743020}) = 0
clock_gettime(CLOCK_MONOTONIC, {124050, 654776675}) = 0
clock_gettime(CLOCK_MONOTONIC, {124050, 654810241}) = 0
clock_gettime(CLOCK_MONOTONIC, {124050, 654844540}) = 0
poll([{fd=5, events=POLLIN}], 1, 1000)  = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {124051, 656031748}) = 0
clock_gettime(CLOCK_MONOTONIC, {124051, 656071876}) = 0
poll([{fd=5, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {124051, 656144591}) = 0
clock_gettime(CLOCK_MONOTONIC, {124051, 656178423}) = 0
clock_gettime(CLOCK_MONOTONIC, {124051, 656213407}) = 0
clock_gettime(CLOCK_MONOTONIC, {124051, 656248064}) = 0
clock_gettime(CLOCK_MONOTONIC, {124051, 656282940}) = 0

看起来它已在文件描述符fd = 5

中重试
$ sudo ls -lh /proc/8824/fd
total 0
lr-x------ 1 se se 64 Feb 19 11:39 0 -> /dev/null
l-wx------ 1 se se 64 Feb 19 11:39 1 -> /var/www/html/SE/logs/tweetscan.1502191014.4431.log
l-wx------ 1 se se 64 Feb 19 11:39 2 -> /var/www/html/SE/logs/tweetscan.1502191014.4431.log
lrwx------ 1 se se 64 Feb 19 11:39 3 -> /var/lib/php5/sess_rlbj4aog6gukb725ao3nks2084
l-wx------ 1 se se 64 Feb 19 12:09 4 -> /tmp/curl_8824
lrwx------ 1 se se 64 Feb 19 12:09 5 -> socket:[688848]

因为问题在于卷曲我

  • 更新了php5-curl
  • 将卷曲从7.35升级到7.40
  • 将openssl从“OpenSSL 1.0.1f 2014年1月6日”升级为“OpenSSL 1.0.2 2015年1月22日”

每次重启都会。这些解决方案都没有帮助。

关于操作系统:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"
NAME="Ubuntu"
VERSION="14.04.2 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.2 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
  

PHP 5.5.9-1ubuntu4.6

     

卷曲7.40.0

     

OpenSSL 1.0.2 2015年1月22日

     

Apache / 2.4.7(Ubuntu)

另一个问题是:如果脚本挂起,则无法获取其状态,将其终止并重新启动。一切都表明它正在运行,唯一的日志表明该过程什么都不做。

亲切的问候

0 个答案:

没有答案