В настоящее время я изучаю проблемы в следующей системе:
- 3,2 ГГц 8-ядерный компьютер, оперативная память 24 ГБ
- Debian 6.0.2
- ulimit-n 4096
- ulimit -Sn 4096
- ulimit -Hn 65535
- Tomcat 6.0.28
- MySQL 5.0.51a (через hibernate и несколько ручных запросов JDBC)
- также достаточно места для кэширования
Я тестирую самые распространенные запросы к серверу с 2000 запросов в минуту удаленно.Инструмент тестирования является последним jMeter.Среднее время отклика составляет около 65 мс, минимальное значение равно 35, максимальное значение равно 4000 мс (в редких случаях, но у него есть причина).
Насколько я видел htop, системных характеристик достаточно как минимум в 3 разабольше запросов в минуту.(Среднее ЦП: 25%, ОЗУ: 5 из 22 ГБ) Сам сервер доступен постоянно.(Проверяйте его постоянно во время выполнения теста.)
Важным является тот факт, что каждый запрос приводит к 3 дополнительным запросам к локальному коту, где второй наконец получает необходимые данные, а последний - для статистики: jMeter (1) -> RESTeasy-Service (2) ->? -Service (2) -> Data-Service (2) - (новый поток)> Statistic-Service (2)
(1) - мой jMeterтестовый сервер и удаленный от (2), который является сервером Tomcat.Да, архитектура может быть немного странной, но это не моя вина.^^
Я переключил управление потоками на пул в server.xml.Установите максимальные потоки 1000 по умолчанию с 200 и 10 бездействующими с 4. Что я заметил, так это то, что число одновременных потоков, как никогда, уменьшается, а неуклонно возрастает до максимума tomcat , кажется .htop сообщает 160 потоков, пока tomcat остановлен.Около 460, когда это началось заново.(Кажется, что службы запускаются через несколько ...) После нескольких часов (иногда реже) попадания на сервер с 2000 запросами в минуту htop сообщает, что существует 1400 задач.Это кажется тем моментом, когда я начинаю получать тайм-ауты в jMeter.Поскольку это занимает очень много времени, я не смотрел его тысячу раз, и поэтому не могу гарантировать, что это причина, но именно так и происходит.
Основные вопросы:
Математика говорит мне, что число одновременно используемых потоков никогда не должно превышать 600. (34 запроса * 4 запроса * 4 секунды = 544, даже меньше, но приблизительно 600 должно быть в порядке).Насколько я понимаю идею пула потоков, неиспользуемые потоки должны быть освобождены и остановлены, если простаивают слишком долго.Есть ли еще способ, которым я мог бы получить тысячи бездействующих (?) Потоков?И это нормально?
Может ли поток, запущенный вручную в одном из процессоров запросов, запретить освобождение потоков tomcat?
Shouldn 'Есть ли какие-либо сообщения в журнале, говорящие мне, что Tomcat не может создать / извлечь поток для запроса?
Есть еще идеи?Я работаю над этим слишком долго, и теперь tomcat исчерпывает свой пул потоков, кажется единственной веской причиной этих странных таймаутов.Но, может быть, у кого-то есть другая подсказка.
Заранее спасибо, особенно если вы наконец-то сможете меня спасти от этого ...