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) - именно тогда начинается проблема.