Я запускаю 2 сервера, 1 веб (nginx / php), 1 базу данных (mysql).
Nginx имеет около 1500 активных процессов в секунду, а статус mysql показывает в среднем около 15 текущих подключений опций.
Сегодня я начал бегать: netstat -npt | awk '{print $5}' | grep -v "ffff\|127\.0\.0\.1" | awk -F ':' '{print $1}' | sort -n | uniq -c | sort -n
Это показало, что было более 7000 активных подключений с моего веб-сервера к IP-адресу моего сервера базы данных. Это кажется какой-то крайностью. Я не использую постоянные соединения в PHP для подключения к Mysql.
Есть идеи, почему так много открытых подключений?
Хотя это становится немного stackoverflow'y, вот что:
Вероятно, потому что вы не закрываете свои соединения в коде. Если да, я бы порекомендовал вам перейти на mysql_pconnect()
, или просто добавьте mysql_close()
до конца всех запрошенных php-страниц
Если все подключения к серверу mysql находятся в состоянии: TIME_WAIT
, попробуйте понизить wait_timeout
в вашей конфигурации mysqld. Проверьте Документация MySQL для получения дополнительной информации
ОБНОВИТЬ: Как указал ChristopherEvans, вы можете подключиться напрямую к сокету mysql вместо использования конечных точек IP, чтобы избежать исчерпания неиспользуемых портов на локальном интерфейсе.
Рассмотрение пула соединений - таким образом, каждое соединение не будет нуждаться в собственном процессе.
http://php.net/manual/en/mysqlnd-ms.pooling.php
Не уверен, что это сработает, поскольку вы не используете постоянные соединения.