Мы регулярно подключаем jconsole (и другие инструменты) прямо к производству.Для нас нет значительных накладных расходов, инструментарий уже работает в JVM, поэтому вы просто подключаете удаленный процесс для чтения опубликованных значений.Я говорю, дерзай!
В любом случае, тебе действительно нужно посмотреть, что происходит на коробке.Дампы потока могут или делать некоторые внутренние инструменты.Под внутренним инструментарием я подразумеваю запись ключевых мер в коде и их раскрытие каким-либо образом.По сути, это то, что делает JVM (демонстрируя их с помощью JMX), но использование собственного дает вам больше специфичности.Например, я часто записываю время запроса / ответа или другие критические временные характеристики производительности пути.
о, и еще одна вещь.Вы можете настроить свое приложение на использование агента, чтобы предоставить еще больше информации.Как правило, это может быть связано с подключением профилировщика (например, jprofiler или yourkit), но это делает обычно добавляет больше накладных расходов и не рекомендуется для производства.
Стоит также подумать о стоимостине получить необходимую информацию из виртуальной машины.Например, стоит ли стоимость устранения проблемы больше или меньше стоимости небольшого снижения производительности при мониторинге в%?
С научной точки зрения в этой статье есть некоторые комментарии.Это предполагает до 7% накладных расходов (что противоречит моему предыдущему пункту), предыдущая статья от 2006 года предлагает 3-4%, но оба они являются контекстуальными результатами.Например, приложения, интенсивно использующие процессор, могут или не могут быть затронуты больше, чем те, которые связаны с IO.
Так что более правильный ответ от меня (а не просто "пойти на это") будет понять, какое влияние это окажетдля вашего приложения в вашей среде путем измерения.Запустите репрезентативные тесты в среде, аналогичной производственной, с подключенным и отключенным jconsole, и убедитесь сами.
См. Также этот вопрос stackoverflow .