Здравствуйте. Есть web-сервер, работающий с mysql таким образом,что на каждый чих устанавливается соединение, что-то быстренько там делается, потом соединение разрывается (велосипед не мой). Соответственно, под нагрузкой число установки соединений в секунду с mysql достигает неразумных значений. Это приводило к известной проблеме, когда из-за закрытых, но висящих в состоянии TIME_WAIT, соединений заканчиваются локальные TCP порты, и соединения больше не открываются. Попытка уменьшить время ожидания по найденным в инете рекомендациям результата не дала (потом нашёл и почему), а вот установка параметра sysctl net.ipv4.tcp_tw_reuse в 1 помогла. По крайней мере соединения теперь устанавливаются без ошибок, хотя количество TIME_WAIT не уменьшилось. Ещё есть параметр net.ipv4.tcp_tw_recycle, его тоже можно установить в 1, тогда количество соединений не будет расти до запредельных значений, если это важно, однако это нарушает RFC, смысла не вижу, и в решении проблемы это не помогает.
А проблема вот в чём: установка TCP-соединений с такой частотой наглухо убивает процессор. При частоте запросов около 1500 в секунду полностью в астрал уходит i7-3770 всеми четырьмя ядрами с гипертредингом. Нет, он не виснет и даже не тормозит, запросы продолжает обрабатывать исправно, но загрузка становится строго 100%, и, видимо, дальнейшее увеличение частоты запросов невозможно. При этом web-сервер со всеми потрохами загружает процессор на считанные единицы процентов. Остальное - что-то системное. top показывает примерно 50/50 usr и sys, но процесс, съедающий процессорное время, не отображается. Что интересно - принимающий эти запросы сервер - mysql на другой машине, чувствует себя вполне комфортно, т.е. такая проблема только на исходящих соединениях, а не на входящих.
Вопросов, собственно, два: 1. Как посмотреть в top, какой скрытый процесс съедает процессор? Признаюсь - мне такое в последний раз очень давно нужно было, и я пользовался какой-то опцией top, вроде бы -S, но сейчас это не помогает - всё равно не видно. Понимаю, что ядро не увидеть, но ведь usr тоже много, кто-то же это съедает? 2. Что-нибудь с этим можно сделать, кроме как переписать всё, чтобы не открывать соединения в таких количествах (но это не в моей компетенции)?
ОС - Debian 7, хотя пробовалось и под Centos с тем же результатом.