Позвольте мне кратко объяснить вам мою проблему.
Архитектура (для проблемы) следующая:
- 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 секунд, поэтому ошибка прекратилась.Но это не реальное решение проблемы.
Вопросы, которые я имею в виду:
Php PDO запускает соединение с БД для каждогопользователь и открыть TCP соединение для каждого запроса к БД и повторно использовать созданное БД соединение?Если это правда, можно ли это исправить без дополнительного веб-сервера?
Почему и как существует такая большая разница между соединениями в состоянии TIME_WAIT на Apache и MariaDB?Это проблема PDO, которая не закрывает соединения должным образом?
Заранее спасибо.
PS: Соединения с MariaDB не постоянны