Bug #74971 [Com]: (HY000/2002): Resource temporarily unavailable

From: Date: Fri, 26 Oct 2018 13:10:44 +0000
Subject: Bug #74971 [Com]: (HY000/2002): Resource temporarily unavailable
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-217696@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74971&edit=1

 ID:                 74971
 Comment by:         spam2 at rhsoft dot net
 Reported by:        spam2 at rhsoft dot net
 Summary:            (HY000/2002): Resource temporarily unavailable
 Status:             Open
 Type:               Bug
 Package:            MySQLi related
 Operating System:   Linux
 PHP Version:        7.0.21
 Block user comment: N
 Private report:     N

 New Comment:

it turns out that MariaDB 10.2.8 upwards improves that
https://jira.mariadb.org/browse/MDEV-13375

-------- Weitergeleitete Nachricht --------
Betreff: Re: [Maria-discuss] connection handling is buggy (HY000/2002): Resource temporarily
unavailable)
Datum: Sun, 20 Aug 2017 00:02:13 +0200

Am 17.07.2017 um 15:22 schrieb Vladislav Vaintroub:
> On 17.07.2017 15:14, Reindl Harald wrote:
>>
>> Am 17.07.2017 um 15:02 schrieb Vladislav Vaintroub:
>>> You are getting HY000/2002, the range starting with 2000 (ending iirc 
>>> 3000) is the error originating on client.  If I was to guess it is a 
>>> client-side connection timeout
>>
>> are you aware that the strace output below with "EAGAIN (Resource 
>> temporarily unavailable)" is from running strace on the myslqd PID?
> And what does it prove? With server doing non-blocking socket reads, 
> EAGAIN is expected , and handled by switching to poll(). Since long time 
> (if memory serves me right 10.0/MySQL 5.6), this is how 
> net_read_timeout/net_write_timeout are handled on Unixes,on the server 
> side

after 10.2.8 fixed https://jira.mariadb.org/browse/MDEV-13375 it
proves that all the talking about timeouts and issue on the client side was nonsense as i said from
the very begin

[harry@srv-rhsoft:~]$ ab -c 150 -n 1000000 -k http://corecms
Concurrency Level:      150
Time taken for tests:   214.193 seconds
Complete requests:      1000000
Failed requests:        0
Keep-Alive requests:    1000000
Total transferred:      4188197222 bytes
HTML transferred:       3777430423 bytes
Requests per second:    4668.69 [#/sec] (mean)
Time per request:       32.129 [ms] (mean)
Time per request:       0.214 [ms] (mean, across all concurrent requests)
Transfer rate:          19095.09 [Kbytes/sec] received


Previous Comments:
------------------------------------------------------------------------
[2018-10-26 12:40:47] pierrie at gmail dot com

I am experiencing the same problem conditions on my server with all custom code, i was using PHP5
before upgrading to PHP7 and on PHP5 i did not have this problem.

I have started porting all my PHP MySql connections to PDO is i have tried many suggestions, all to
no avail. I believe there is a problem with MySqli on PHP7. It cannot handle high volume of multiple
connections.

I have +- 300 connections per second with php calls and Mysqli could not handle it, the error log
was filled with (HY000/2002): Resource temporarily unavailable.

I have a Mysql connection limit of 10000 and according to Mysql stats the highest amount of
concurrent connections i have ever had is +-7000, normal load +-600 connections open at any time.

Hope this helps someone as i have spend days searching the web with this.

------------------------------------------------------------------------
[2017-07-23 16:21:23] spam2 at rhsoft dot net

see also https://jira.mariadb.org/browse/MDEV-13375

DUNNO on which side the problem exists but as long as a benchmarked CMS responds to additional
browser requests where the whole desktop also runs on said machine responds within 0.003 seconds
there is no good reason to talk about overloading and failed requests - and 250 concurrent requests
are not really much at all

------------------------------------------------------------------------
[2017-07-22 14:10:52] spam2 at rhsoft dot net

Description:
------------
mysqlnd/mysqli scales badly on unix-socket under load

that can only be rproduced on fast machines and with http-keep-alive because otherwise the
connection overhead mask the issue and which extremely optimized code 

but originally i have seen the issue on our production cms with exactly the benchmark below - the
reproducer just makes it easier beause it's even more lightweight than the core-cms code
__________________________________

my.cnf (MariaDB 10.2)

max_connections = 300
thread_handling = pool-of-threads
thread_pool_idle_timeout = 900
__________________________________

<?php declare(strict_types=1);
require __DIR__ . '/php/serverconf.inc.php';
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);
if(mysqli_real_connect($conn, 'localhost', $sql_user, $sql_pwd, $sql_db, 3600,
'', 0) === true)
{
 echo 'OK';
}
else
{
 echo 'FAILED';
}
__________________________________

ab -c 250 -n 1000000 -k http://corecms/connect-bench.php
__________________________________

[22-Jul-2017 15:57:49 Europe/Vienna] PHP Warning:  mysqli_real_connect() [<a href='http://at.php.net/manual/de/function.mysqli-real-connect.php'>function.mysqli-real-connect.php</a>]:
(HY000/2002): Resource temporarily unavailable in /mnt/data/www/corecms.rhsoft.net/connect-bench.php
on line 5
[22-Jul-2017 15:57:49 Europe/Vienna] PHP Warning:  mysqli_real_connect() [<a href='http://at.php.net/manual/de/function.mysqli-real-connect.php'>function.mysqli-real-connect.php</a>]:
(HY000/2002): Resource temporarily unavailable in /mnt/data/www/corecms.rhsoft.net/connect-bench.php
on line 5
[22-Jul-2017 15:57:50 Europe/Vienna] PHP Warning:  mysqli_real_connect() [<a href='http://at.php.net/manual/de/function.mysqli-real-connect.php'>function.mysqli-real-connect.php</a>]:
(HY000/2002): Resource temporarily unavailable in /mnt/data/www/corecms.rhsoft.net/connect-bench.php
on line 5
__________________________________

MariaDB guys state that this is a client issue (while that is likely true i don't believe in
timeouts given the 11696 requests/second)

Am 17.07.2017 um 15:02 schrieb Vladislav Vaintroub:
> You are getting HY000/2002, the range starting with 2000 (ending iirc 3000) is the error
> originating on client.  If I was to guess it is a client-side connection timeout




------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=74971&edit=1


Thread (4 messages)

« previous php.bugs (#217696) next »