Bug #62658 [Com]: When enable âwith-curlwrappers option, stream_get_contents() may cpu 100%
| From: | kaiwang dot chen at gmail dot com | Date: | Fri, 08 Nov 2013 07:19:13 +0000 |
| Subject: | Bug #62658 [Com]: When enable âwith-curlwrappers option, stream_get_contents() may cpu 100% | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-182649@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=62658&edit=1
ID: 62658
Comment by: kaiwang dot chen at gmail dot com
Reported by: sopl dot wang at gmail dot com
Summary: When enable âwith-curlwrappers option,
stream_get_contents() may cpu 100%
Status: No Feedback
Type: Bug
Package: cURL related
Operating System: ALL
PHP Version: master-Git-2012-07-25 (Git)
Assigned To: pierrick
Block user comment: N
Private report: N
New Comment:
I just experienced exactly same problem, which should have been fixed as of 5.3.18/5.4.8/5.5.0 with
this patch https://github.com/php/php-src/commit/936553d666405bc783511979b17d78d51905b9cd
sopl's analysis is correct, and he was affected because his version is 5.4.7
To reproduce the problem, one need an old php version and a slow connection which could be simulated
with:
1) on host A providing http service, enforce traffic control with
tc qdisc add dev em1 root handle 1:0 netem delay 500msec
2) on host B runs
strace -ttt ./sapi/cli/php <<< '<?php file_get_contents("http://hostA");'
3) on host A, drop the traffic control rule
tc qdisc del dev em1 root
Then search the strace output for "recvfrom\|select.*= 2\|poll.*= 1" in your vim editor,
you will find between matched lines thousands of "select ... = 1" and "poll ... =
0" wasting cpu cycles.
PS: curlwrappers has been totally removed from php as voted https://wiki.php.net/rfc/curl-wrappers-removal-rfc
Previous Comments:
------------------------------------------------------------------------
[2013-02-18 00:35:56] php-bugs at lists dot php dot net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.
------------------------------------------------------------------------
[2012-11-17 00:53:40] pierrick@php.net
Here's what I have on my side with today's version of the master branch :
select(4, [3], [], [], {15, 0}) = 1 (in [3], left {4, 999876})
poll([{fd=3, events=POLLIN|POLLPRI}], 1, 0) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "1\r\n1\r\n", 16384, 0, NULL, NULL) = 6
select(4, [3], [], [], {15, 0}) = 1 (in [3], left {5, 182})
poll([{fd=3, events=POLLIN|POLLPRI}], 1, 0) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3, "1\r\n1\r\n", 16384, 0, NULL, NULL) = 6
I compiled it with the same curl version 7.21.6. As you can see I can't reproduce it. My select
don't have
anything in the Output file descriptor. Can you test if you still have this different output in your
strace ? Do
you use the exact same script you sent in your previous comment ?
------------------------------------------------------------------------
[2012-10-07 13:59:43] sopl dot wang at gmail dot com
You may try use
file_get_contents to open a very slow website to help reproduce
this problem. When open a very very slow website, this issue will be more evident.
------------------------------------------------------------------------
[2012-10-07 13:49:51] sopl dot wang at gmail dot com
Still have issue (a bit different of output, but still cpu 100%) when I build
and test on php-5.4.7 GA release. Follow is my build config:
./configure --prefix=/usr/local/webserver/php5.4.7 --with-config-file-
path=/usr/local/webserver/php5.4.7/etc --with-mysql=/usr/local/webserver/mysql5
--with-mysqli=/usr/local/webserver/mysql5/bin/mysql_config --with-iconv-dir=/usr
--with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-
dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-
sysvsem --enable-inline-optimization --with-curl=/usr --with-curlwrappers --
enable-ftp --enable-mbregex --enable-fpm --with-fpm-user=www --with-fpm-
group=www --disable-ipv6 --enable-mbstring --with-mcrypt --with-gd=/usr --
enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets
--enable-gd-jis-conv --disable-debug --enable-sysvshm --enable-soap --with-pdo-
mysql=shared,/usr/local/webserver/mysql5 --with-pdo-sqlite=shared --with-
sqlite=shared --enable-pdo=shared
Test script
-----------
./sapi/cli/php <<<'<?php while(1) file_get_contents("http://www.l4ka.org");'
Output
------
poll([{fd=3, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {26871452, 912511643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912536643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912553643}) = 0
select(4, [3], [3], [], {15, 0}) = 1 (out [3], left {15, 0})
clock_gettime(CLOCK_MONOTONIC, {26871452, 912606643}) = 0
poll([{fd=3, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {26871452, 912643643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912668643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912685643}) = 0
select(4, [3], [3], [], {15, 0}) = 1 (out [3], left {15, 0})
clock_gettime(CLOCK_MONOTONIC, {26871452, 912738643}) = 0
poll([{fd=3, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {26871452, 912775643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912800643}) = 0
clock_gettime(CLOCK_MONOTONIC, {26871452, 912817643}) = 0
select(4, [3], [3], [], {15, 0}) = 1 (out [3], left {15, 0})
System version
--------------
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-
amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-
ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.6 (Final)
Release: 5.6
Codename: Final
Curl version
------------
curl 7.21.6 (x86_64-unknown-linux-gnu) libcurl/7.21.6 OpenSSL/0.9.8b zlib/1.2.3
libidn/0.6.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s
rtsp smtp smtps telnet tftp
Features: IDN Largefile NTLM SSL libz
------------------------------------------------------------------------
[2012-09-28 19:44:39] pierrick@php.net
Do you still have this issue ? I tried on my local build and everything work as
expected. If it doesn't work could you give me more details about your build ?
libcurl version ?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=62658
--
Edit this bug report at https://bugs.php.net/bug.php?id=62658&edit=1