Bug #75471 [Opn->Nab]: PHP curl through proxy generating high CPU load

From: 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

« previous php.bugs (#235570) next »