Подтвердить что ты не робот

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

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

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

Может ли кто-нибудь дать мне несколько указателей?

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

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

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

Спасибо!

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Снимок в темноте Eclipse Memory Analyzer

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

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

Проверьте настройки ограничения TCP NO Delay и Nagle на сервере