Bug #75471 [Opn->Nab]: PHP curl through proxy generating high CPU load
| From: | cmb@php.net | Date: | Tue, 03 Aug 2021 14:35:58 +0000 |
| Subject: | Bug #75471 [Opn->Nab]: PHP curl through proxy generating high CPU load | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-235570@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=75471&edit=1
ID: 75471
Updated by: cmb@php.net
Reported by: alessandro dot ballini at gmail dot com
Summary: PHP curl through proxy generating high CPU load
-Status: Open
+Status: Not a bug
Type: Bug
Package: cURL related
Operating System: Ubuntu 16.04
PHP Version: 7.0.25
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
These options are passed through to libcurl almost verbatim, so
this doesn't look like a PHP issue, but rather an issue with
libcurl. If it still happens with latest libcurl, consider to
report it upstream[1].
[1] <https://github.com/curl/curl/issues>
Previous Comments:
------------------------------------------------------------------------
[2017-10-31 22:37:06] alessandro dot ballini at gmail dot com
Description:
------------
After investigating the reasons for the high CPU load generated by an application sending many curl
requests with 20 parallel PHP-cli scripts, I've found out the main reason is the PROXY option
set to the curl handle.
The following code is generating a 0.5-1.5% CPU load at the moment of curl_exec when run without the
proxy and 12-25% when using any HTTP proxy (I've tried many different ones). It is NOT
happening with a SOCK5 proxy type.
With many threads running many requests at the same time, it soon becomes critical.
I'm using:
curl 7.55.1 (x86_64-conda_cos6-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.2l zlib/1.2.11 libssh2/1.8.0
Release-Date: 2017-08-14
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp
smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
Test script:
---------------
do {
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_ENCODING, 'identity');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_PROXY, 'xxx');
curl_setopt($ch, CURLOPT_PROXYPORT, 'xxx');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_URL, 'https://api.ipify.org?format=json');
curl_exec($ch);
curl_close($ch);
sleep(10);
} while (true);
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=75471&edit=1