В двух словах: мой экземпляр JBoss работает нормально, но через несколько дней его производительность постепенно снижается.
Подробное:
У меня есть настройки с JBoss 5.1.0-GA и Java 1.6.0_18-b07 (x64), работающие на 64-битном RHEL 4-боксе. Аппаратное обеспечение представляет собой виртуальную машину с 8-ядерным процессором Xeon X5550 / 20G.
Продукт, развернутый в JBoss, содержит веб-сервис, на котором выполняется тест на выносливость.
База данных не вовлечена в процесс.
Тесты выполняются с использованием soapui с четырьмя потоками, и тесты настроены на использование процессора 20%.
Допустим, сначала среднее время ответа составляет 300 мс. Через 2 дня время отклика теперь 600 мс, что я не понимаю.
Конечно, я сделал несколько проверок:
- Нет утечек памяти (подтверждено с помощью jprofiler)
- Память кучи всегда составляет около 25-50%, использование свободного пространства - 50%
- GC почти никогда не занят
- Все потоки бездействуют после проверки дампа потока
В то время как я делаю некоторые дальнейшие исследования, я делал профиль процессора с JProfiler в начале (когда он все еще быстр), и включал (медленный) конец. Тогда я вижу, что каждый отдельный звонок на 100% медленнее!
Даже вызов простой карты # put (). (количество вызовов и содержание этих карт одинаковы).
При запуске профилировщика нет никаких признаков заблокированных потоков, только запущенные потоки.
Кто-нибудь знает, что вызывает снижение производительности?
Спасибо!
<ч />
Обновление: устранено снижение производительности путем обновления версии Java до 1.6.0_24!
Несмотря на то, что у меня не было выбора, я просмотрел все заметки о выпуске java vm и обнаружил исправление производительности и надежности в 1.6.0_23. Смотрите также
1.6.0_23 примечания к выпуску
После обновления jvm производительность остается неизменной и не снижается в течение нескольких дней.