Я пытаюсь решить проблемы с производительностью с помощью большого и сложного Java-приложения tomcat. Самая большая проблема на данный момент заключается в том, что время от времени использование памяти резко возрастает, и приложение перестает отвечать на запросы. Я исправил все, что мог исправить с помощью профилировщиков журналов и байесовского анализа файлов журналов. Я рассматриваю возможность запуска профилировщика на рабочем сервере Tomcat.
Примечание для читателя с нежной чувствительностью:
Я понимаю, что некоторым может показаться оскорбительным само понятие профилирования производственного приложения. Пожалуйста, будьте уверены, что я исчерпал большинство других вариантов. Причина, по которой я рассматриваю это, заключается в том, что у меня нет ресурсов для полного дублирования нашей производственной настройки на моем тестовом сервере, и я не смог вызвать сбои, представляющие интерес на моем тестовом сервере.
Вопросы:
Я ищу ответы, которые подходят либо для веб-приложения Java, работающего на tomcat, либо для ответа на этот вопрос независимо от языка.
- Каковы затраты производительности профилирования?
- Есть ли другие причины, по которым плохая идея удаленного подключения и профилирования веб-приложения в рабочей среде (странные режимы сбоев, проблемы безопасности и т. Д.)?
- Какое влияние оказывает профилирование на отпечаток стопы памяти?
- В частности, существуют ли инструменты профилирования Java, имеющие очень низкую стоимость производительности?
- Какие-либо инструменты профилирования Java, предназначенные для профилирования веб-приложений?
- Есть ли у кого-нибудь критерии производительности при профилировании с visualVM?
- Какого размера приложения и наборы данных могут масштабироваться в VisualVM?