TCP-соединения не обрабатываются правильно с PDO и Ubuntu - PullRequest
0 голосов
/ 21 сентября 2018

Позвольте мне кратко объяснить вам мою проблему.

Архитектура (для проблемы) следующая:

  • 1 Ubuntu 16.04 с сервером Apache 2.4;php-fpm 7.2 и Laravel
  • 1 Ubuntu 16.04 с сервером MariaDB v.15.2 distrib 10.2.14

Проблема, которая началась через пару дней, заключается в том, что веб-сервер выдает эту ошибку:

SQLSTATE [HY000] [2002] Невозможно назначить запрошенный адрес

Что я нашел до сих пор:

В MariaDB

  • ~ 30-40 одновременных подключений

    netstat -nat |awk '{print $ 6}' |сортировать |uniq -c |sort -n

  • показывает среднее ~ 800-900 соединений в TIME_WAIT status

Пока что все кажется законным.Но на сервере Apache результаты таковы:

netstat -nat |awk '{print $ 6}' |сортировать |uniq -c |sort -n

  • ~ 10-12k соединений в состоянии TIME_WAIT

Когда они получают> 28k, я получаю ошибку, упомянутую выше.Это потому, что сервер имеет ~ 28 тыс. Свободных портов.(диапазон 32768 - 61000).Я вчера изменил диапазон на 10000 - 63000, и я изменил ожидание в состоянии TIME_WAIT на 5 секунд, поэтому ошибка прекратилась.Но это не реальное решение проблемы.

Вопросы, которые я имею в виду:

  1. Php PDO запускает соединение с БД для каждогопользователь и открыть TCP соединение для каждого запроса к БД и повторно использовать созданное БД соединение?Если это правда, можно ли это исправить без дополнительного веб-сервера?

  2. Почему и как существует такая большая разница между соединениями в состоянии TIME_WAIT на Apache и MariaDB?Это проблема PDO, которая не закрывает соединения должным образом?

Заранее спасибо.

PS: Соединения с MariaDB не постоянны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...