У меня есть сервер приложений (причал 6 на Linux-коробке), на котором размещены 15 отдельных приложений (отдельные войны). Каждые 3 или 4 дня я получаю предупреждение от nagios о количестве открытых TCP-соединений. После проверки я вижу, что подавляющее большинство этих подключений к серверу MySQL.
netstat -ntu | grep TIME_WAIT
Показывает более 10000 подключений на сервере MySQL от сервера приложений (обратите внимание, что состояние TIME_WAIT). Если я перезапущу причал, соединения упадут почти до нуля.
Некоторые интересные значения из статуса шоу:
mysql> show status;
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| Aborted_clients | 244 |
| Aborted_connects | 695853860 |
| Connections | 697203154 |
| Max_used_connections | 77 |
+--------------------------+-----------+
«Показать список процессов» не показывает ничего необычного (что я и ожидал, так как большинство соединений простаивают - помните состояние TIME_WAIT сверху).
У меня есть TEST env для этого сервера, но у него никогда не было проблем. Очевидно, что он не получает много трафика, и сервер приложений постоянно перезапускается, поэтому отладка там не сильно помогает. Думаю, я мог бы покопаться в каждом отдельном приложении и написать нагрузочный тест, который попал бы в код базы данных, но это заняло бы много времени / хлопот.
Есть идеи, как я могу отследить приложение, которое захватывает все эти соединения и никогда не отпускает?