Bug 226702 - httpd+php+mysql leaves half-open connections to mysql after intense use
httpd+php+mysql leaves half-open connections to mysql after intense use
Status: CLOSED NOTABUG
Product: Red Hat Enterprise Linux 5
Classification: Red Hat
Component: httpd (Show other bugs)
5.0
x86_64 Linux
medium Severity medium
: ---
: ---
Assigned To: Joe Orton
David Lawrence
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2007-01-31 19:42 EST by George Toft
Modified: 2007-11-30 17:07 EST (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2007-02-05 10:24:47 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description George Toft 2007-01-31 19:42:54 EST
Description of problem:
httpd + php leave open connections to database server after stress test or heavy
use.


Version-Release number of selected component (if applicable):
httpd-2.2.3-5.el5
php-5.1.6-3
php-mysql-5.1.6-3
php-pdo-5.1.6-3

How reproducible:
Use test tool, such as Jakarta jmeter, to put 50 threads against a simple test
page that pulls back a table from a mysql database.


Steps to Reproduce:
Create simple mysql database on one server.  database has 1 table with 1.6M
bytes of information in 25,000 rows.
Set up apache+php on another server.
Set up jmeter on a web client
Run jmeter against apache.
Watch ESTABLISHED connections to database server from web server
Watch ESTABLISHED connections from web server to database server 

  
Actual results:
After test stops, several connections are open on web server:
[root@rhel5xen1 logs]# netstat -an | grep EST | grep 3306
tcp        0      0 ***.***.76.120:48398          ***.***.75.6:3306            
ESTABLISHED
tcp        0      0 ***.***.76.120:48549          ***.***.75.6:3306            
ESTABLISHED
tcp        0      0 ***.***.120:41543          ***.***.75.6:3306            
ESTABLISHED
tcp        0      0 ***.***.76.120:41052          ***.***.75.6:3306            
ESTABLISHED
[root@rhel5xen1 logs]#

The above was 2 hours after the test finished.  Immediately after the test,
there were 8 of these half-connections.


There are no ESTABLISHED connections on the db server:
[root@RH3-6850 root]# netstat -an | grep EST | grep 3306
[root@RH3-6850 root]#




Expected results:
Expect no ESTABLISHED connections from either end after the test ends.


Additional info:
Sanitized PHP page source:
<html>

<body>

<?php

$db = mysql_connect("***.***.***.***", "dbuser");

if (!$db)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("testdb",$db);

$result = mysql_query("SELECT Name, Account, CID FROM nameaccount",$db);

echo "<table border=1>";

echo "<tr><td>Name</td><td>Account</td><td>CID</td></tr>\n";

while ($myrow = mysql_fetch_assoc($result)) {

        echo
"<tr><td>{$myrow['Name']}</td><td>{$myrow['Account']}</td><td>{$myrow['CID']}</tr>";

}

echo "</table>\n";

mysql_close($db);

?>

</body>

</html>


database summary:
mysql> select count(*) from nameaccount;
+----------+
| count(*) |
+----------+
|    24999 |
+----------+
1 row in set (0.03 sec)

mysql> describe nameaccount;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| Name    | varchar(255) | YES  |     | NULL    |       |
| Account | varchar(255) | YES  |     | NULL    |       |
| CID     | varchar(255) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>
Comment 1 Joe Orton 2007-02-05 10:24:47 EST
It is expected behaviour that php-mysql leaves database connections open in the
default configuration: see:

  http://www.php.net/manual/en/features.persistent-connections.php

edit the persistence settings in /etc/php.ini to change this.

Note You need to log in before you can comment on or make changes to this bug.