Как использовать VisualVM для выявления узкого места / проблемы - PullRequest
14 голосов
/ 23 августа 2011

Как я писал в Падение производительности после 5 дней работы веб-приложения, как определить узкое место? , у меня проблема с приложением, которое замедляется после некоторого времени работы.

Я запустил VisualVM и сделал снимок между разными временами. Сейчас приложение работает очень медленно, но я не знаю, как определить узкое место. У них не так много различий между собой, и единственное, что немного растет, это куча, которая через некоторое время успешно удаляется мусором.

Кто-нибудь может дать мне несколько советов?

Вот снимки (приложения):

[1] http://www.2shared.com/file/W4XJ6HtE/application-1314108550032.html

[2] http://www.2shared.com/fadmin/22521338/f512f97e/application-1314097232727.apps.html

Спасибо!

РЕДАКТИРОВАТЬ: Присмотревшись, я заметил, что процессор даже не используется много ... и система действительно работает медленно!

Ответы [ 3 ]

6 голосов
/ 23 августа 2011

В качестве первого шага я бы предложил определить, что именно медленно.Это выполняет некоторую работу медленно?Или демонстрирует низкую пропускную способность при обработке заданий от разных клиентов?

Какой ресурс недостаточен?

  • Если вы используете некоторые внешние службы (например, сервер базы данных или RPC-сервер) всегда зарегистрируйте время отклика и проверьте его перед выполнением любых других шагов оптимизации.
  • Это может быть нехватка мощности процессора.Просто посмотрите на использование процессора.
  • Это может быть нехватка памяти.Используйте gc logging для выявления подобных проблем.Об этом есть хорошая тема .
  • Это может быть недостаток скорости жесткого диска.Используйте iostat и узнайте пределы производительности вашего жесткого диска.
  • Это может быть недостаточная пропускная способность сети.Проверьте использование сетевого канала.
  • Также возможно, что вы исчерпали некоторые ограничения, специфичные для ОС, например, количество открытых файлов и / или сетевых сокетов.Убедитесь, что вы правильно сообщаете обо всех исключениях уровня ОС в файлы журналов.

Поскольку вы определили, какой ресурс является недостаточным, и какая часть вашей программы страдает от него, вы можете попытаться найти фрагмент кода.оптимизировать.Брать случайный инструмент и запускать приложение через него, не зная, что искать, не имеет смысла.

По моему личному опыту, очень редкий случай, когда у вас есть только медленный метод, который можно найти с помощью профилировщика.,Скорее всего, это непредвиденный ввод-вывод и / или синхронизация где-то в вашем алгоритме или неверная схема базы данных.

5 голосов
/ 23 августа 2011

На самом деле, есть несколько лучших инструментов, чем VisualVM.

Вы можете попробовать JProfiler, хороший профилировщик (но платный)

И вы можете попробовать профилировщик Netbeans, который бесплатный и прекрасно работает

С VisualVM вы будете видеть только фактическое состояние вашего приложения (использование памяти и процессора, JMX, загруженные классы и т. Д.).

0 голосов
/ 23 августа 2011

Я бы не стал сразу думать, что это проблема вашего приложения. Если система на базе Windows смотрит на антивирусный сканер, любой планировщик обновлений, запущенный в то время.

Убедитесь, что журналы переворачиваются, а отладка фильтруется должным образом, чтобы они не выходили из-под контроля.

Проверьте снимки sql на наличие длительных запросов.Проверьте загрузку БД и кучу БД.

Если у вас какое-то время запущена Visual VM, убедитесь, что у вас есть несколько потоков, готовых принять работу / соединения, будут отображаться желтым цветом (в режиме ожидания).

Выстрел в темноте Анализатор памяти Eclipse

Возьмите дамп кучи, когда вы заметите замедление, и пропустите его через анализатор.

Если в системе на основе Unix проверьте файловые дескрипторы ulimit -a, чтобы убедиться, что процесс java не исчерпал себя.

Проверьте параметры TCP NO Delay и Nagle limit на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...