У меня есть этот сценарий:
[ file: config.php ]
$conn=mysql_connect(...
mysql_select_db
[ file: function.php ]
include('db.php');
function a()
{
mysql_query("INSERT INTO...");
}
[ file: index.php ]
include('function.php');
a();
mysql_close($conn);
в файле config.php у меня есть функции mysql_connect и mysql_select_db, в файле function.php у меня очень длинная функция, в файле «index.php» я вызываю эту функцию (которая выполняет запрос INSERT) и после этого я закрыть соединение MySQL.
Кажется, что все было в порядке, но если я протестирую производительность этого скрипта с помощью ApacheBenchmark, я вижу большое количество спящих соединений, и mysql достигает предела max_user_connection:
| 20592 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
| 20593 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
| 20594 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
| 20595 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
| 20596 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
| 20597 | admin_tracker | localhost | admin_tracker | Sleep | 0 | | | 0.000 |
Поэтому я использовал функцию mysql_pconnect:
** Во-первых, при подключении функция сначала пытается найти (постоянную) ссылку, которая уже открыта с тем же хостом, именем пользователя и паролем. Если он найден, его идентификатор будет возвращен вместо открытия нового соединения.
Во-вторых, соединение с сервером SQL не будет закрыто, когда выполнение скрипта закончится. Вместо этого ссылка останется открытой для будущего использования (mysql_close () не закроет ссылки, установленные mysql_pconnect ()). **
Но проблема сохраняется
[Wed Jul 27 07:12:46.153812 2016] [:error] [pid 29741] [client XX.XX.XX.XX:43853] PHP Warning: mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.177555 2016] [:error] [pid 29744] [client XX.XX.XX.XX:43854] PHP Warning: mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.202182 2016] [:error] [pid 29738] [client XX.XX.XX.XX:43851] PHP Warning: mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
[Wed Jul 27 07:12:46.446825 2016] [:error] [pid 29729] [client XX.XX.XX.XX:43852] PHP Warning: mysql_pconnect(): Too many connections in /home/admin/web/XXXXXXXXXXX/public_html/config.php on line 2
Почему это происходит, если файл совпадает, а mysql_pconnect использует одного и того же пользователя / пароль / базу данных?
Как я могу решить эту проблему?
Спасибо
Задача ещё не решена.
Других решений пока нет …