Доктрина 2 Закрыть соединение
Я использую доктрину 2 PDO с mysql.
При стресс-тестировании сервера mysql сообщает о множестве прерванных подключений (до 20%).
Я пытаюсь найти проблему.
Руководство Mysql предлагает убедиться, что соединения с базой данных закрыты должным образом.
http://dev.mysql.com/doc/refman/5.0/en/communication-errors.html
Я не могу найти никакой информации, если доктрина действительно закрывает подключения или нет, или использует постоянные соединения.
Кроме того, есть ли что-нибудь еще, что может учитывать прерывистые соединения? Я здесь в проигрыше.
PS. Сервер - ubuntu 10.04, nginx 1.x, php 5.3.5 (fpm) и mysql 5.1.41
Ответы
Ответ 1
Из того, что я заметил, Doctrine использует постоянные соединения.
Мы наткнулись на проблему, запустив модульные тесты в symfony2, где база данных была спамерована соединениями в статусе "Сон". Решение, которое сработало для нас:
$entityManager->getConnection()->close();
Ответ 2
У меня та же проблема и
$entityManager->getConnection()->close();
похоже, работает, но работает "лучше" в некоторых версиях PHP, если вы добавляете
gc_collect_cycles()
после закрытия соединений.
У меня все еще есть такие проблемы в старой версии php, возможно, что-то связано с сборщиком мусора, я думаю.
Обновится, если я найду окончательное решение для всех версий php
Ответ 3
Я нашел эту настройку:
https://sroze.io/phpunit-mysql-too-many-connections-error-ab52cd5798c5
Настройка processIsolation="true"
в файле настроек XML PhpUnit кажется трюком.