Задать вопрос
@GilbertAmethyst

Из-за чего может падать соединение MySQL с большим количеством одновременных подключений?

Здравствуйте.

Есть два VPS-сервера, условно VPS-1 (центральный) и VPS-N (воркер).
На воркере есть 120+ php-worker'ов постоянно соединённых с MySQL Базой на центральном сервере.
Для взаимодействия с базой используется Doctrine ORM (Symfony).

Время от времени процессы падают с ошибкой:
PHP Fatal error:  Uncaught Doctrine\ORM\ORMException: The EntityManager is closed. in /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/ORMException.php:144
Stack trace:
#0 /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(756): Doctrine\ORM\ORMException::entityManagerClosed()
#1 /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(589): Doctrine\ORM\EntityManager->errorIfClosed()
#2 /var/www/html/worker/Worker.php(133): Doctrine\ORM\EntityManager->persist(Object(App\Entity\Account))
#3 [internal function]: shutdown(Array)
#4 {main}
  thrown in /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/ORMException.php on line 144


По ошибке видно, что соединение было разорвано, но прямо перед местом куда ссылается ошибка есть следующий код:
if ($this->em->getConnection()->ping() === false) {
            $this->em->getConnection()->close();
            $this->em->getConnection()->connect();
}
//... ->persist($account)


Изменял max_connections, сейчас:
SHOW VARIABLES LIKE "max_connections";
Показывает:
max_connections 4190

Система на обоих серверах:
Ubuntu 18.04 (LAMP), база данных MySQL, php 7.2

Что это может быть и какие лимиты системы или Mysql могут мешать работе?

UPD 1:
Лог MySQL на центральном сервере (на сервере-воркере пустой):
2020-02-06T13:53:15.778279Z 14323 [Warning] IP address 'IP_СЕРВЕРА' could not be resolved: Name or service not known
2020-02-06T13:53:15.792611Z 14323 [Note] Access denied for user 'serviced'@'IP_СЕРВЕРА' (using password: YES)
2020-02-06T15:02:37.363830Z 13961 [Note] Aborted connection 13961 to db: 'БАЗА_ДАННЫХ' user: 'root' host: 'IP_СЕРВЕРА' (Got an error reading communication packets)
2020-02-06T15:02:37.363975Z 13960 [Note] Aborted connection 13960 to db: 'БАЗА_ДАННЫХ' user: 'root' host: 'IP_СЕРВЕРА' (Got an error reading communication packets)
2020-02-06T18:11:13.234979Z 15933 [Note] Got timeout reading communication packets
  • Вопрос задан
  • 402 просмотра
Подписаться 3 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Для начала Оптимальная настройка Mysql
Нужно знать какая нагрузка на сервер: кол-во операций чтения и записи в сек. Для Mysql может не хватать ресурсов машины.
И далее https://ruhighload.com/mysql
Вообще, соединения держать нужно как можно меньше времени и стоит проверить как использовать пул соединений в ORM. Стоит провести работу по оценке эффективности работы веб-приложения с СУБД.
Ubuntu проверять последним вариантом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы