Назад | Перейти на главную страницу

Клиент mysql не может прочитать результат запроса?

Итак, у меня есть эта машина, на которой запущен сервер XMPP, который подключается к своей базе данных MySQL. Когда я начинаю нагрузочное тестирование, все идет нормально до тех пор, пока примерно через 500 секунд я не замечаю:

Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request

начинает появляться. Как они это делают, команда:

mysql> show processlist;

показывает, как MySQL получает следующие запросы, отвечает на них (состояние = отправка данных была записана на ленту), а затем просто бездействует в состоянии = спящий режим в течение 20 секунд, 40 секунд или даже больше. Все это время вызов метода PreparedStatement.execute () не возвращается. В top показывает использование ЦП не более 800% (16 ядер - половина из них используется на пике).

Я проверил / var / log / messages и несколько других мест в / var / log на наличие ошибок на сервере XMPP без каких-либо подсказок. Я также попробовал другой соединитель JDBC, другой сервер MySQL, обновленный JRE, без улучшений. Где мне искать дальше?

Что дальше ? Спасибо!

РЕДАКТИРОВАТЬ: проверил еще несколько, и это не связано ни с количеством потоков, перекачивающих и отправляющих запросы из своих очередей, ни с запросами в секунду, ни с конкретной машиной, ни с типом выполняемых SQL-запросов или количеством подключений к MySQL. Я также осмотрел tcpdump захват, и сервер отвечает на запросы через несколько миллисекунд. В остальное время ... Просто клиент почему-то не получает результат в пользовательское пространство TCP.

Но во всех тестах есть показатель, который остается неизменным - когда он достигает чуть более 30 тысяч одновременно подключенных пользователей (пользователей серверов XMPP) - вот тогда и начинаются проблемы.