Есть ли кеш в JVM или способ, как ускорить метод, который иногда занимает больше времени? - PullRequest
3 голосов
/ 16 февраля 2010

Привет, есть ли кеш или настройки jvm для ускорения вызова методов?

Например: у меня есть веб-сервис, и когда я вызываю его один раз в 10 минут или около того, довольно медленная обработка занимает около 8-10 секунд по сравнению с вызовом один раз в 20 секунд - результат примерно 5 секунд.

Ничто, кроме этого, не работает на сервере. Есть ли способ ускорить это? (Я не могу кэшировать какие-либо объекты или около того.)

Я использовал JProfiler, я его называю с теми же параметрами. Это делает точно то же самое. Разница между временами, когда я это называю. Как долго сервер простаивает. 1 или 30 минут разница.

Спасибо

РЕДАКТИРОВАТЬ: платформа: AIX Java: IBM J9 VM (сборка 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 .. сервер: tomcat

Ответы [ 6 ]

2 голосов
/ 16 февраля 2010

Факторы, которые могут объяснить такое поведение:

  • Обмен - Обработка ОС с низкой активностью заменяется
  • Приоритет - Приоритет процесса ОС иногда может быть немного загадочным, особенно если процесс в основном простаивает.
  • JIT - Чем больше вы вызываете метод, тем больше он оптимизируется
  • GC - Сборщик мусора требует времени для стабилизации, что может привести к различному поведению при разных нагрузках. Опция -server является в основном предустановленной конфигурацией для JVM.
  • Объединение в пул - Потоки и другие ресурсы объединяются. При низкой активности пул может уменьшиться, и объект необходимо будет перераспределить

Расследование такого рода вопросов может быть трудным. Я бы посоветовал вам попытаться сопоставить информацию на уровне ОС с информацией на уровне JVM. Профилировщик, возможно, не самый лучший инструмент, попробуйте JConsole, mem и т. Д.

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

2 голосов
/ 16 февраля 2010

Помимо улучшения самого кода, убедитесь, что JVM, на котором работает сервер, является сервером vm, а не клиентом vm. Используйте параметр -server .

клиент vm :

Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)

сервер vm :

Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)

Чтобы узнать, что вы запускаете на производстве, вы можете программно сделать:

System.getProperty("java.vm.name");

, что должно дать вам что-то вроде: Java HotSpot (TM) 64-битный сервер VM

В противном случае (если вы не хотите прикасаться к коду), вы можете сделать поток дампа и посмотреть на что-то вроде вверху: Полный поток потока Java HotSpot (TM) Виртуальная машина сервера (16.0-b13 смешанный режим)

2 голосов
/ 16 февраля 2010

Используйте профилировщик.

JProfiler будет хорошим выбором.

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

0 голосов
/ 16 февраля 2010

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

0 голосов
/ 16 февраля 2010

Насколько загружен сервер? Через 10 минут сильно загруженный сервер, вероятно, выгружал вашу службу на диск или (в зависимости от программного обеспечения сервера) закрывал экземпляр вашей службы, которая обслуживала последний запрос. Это означает, что спулинг службы для вашего нового запроса очень медленный.

Несколько способов решить эту проблему:

  • Переместить службу на сервер, который не так сильно загружен
  • Изучите лучшее или более подходящее программное обеспечение для запуска вашего сервиса - вы не упомянули, что вы используете (например, Tomcat? JBoss?).
0 голосов
/ 16 февраля 2010

Замедление после простоя обычно вызывается процессом, выгружаемым на диск. Современные системы никогда не простаивают, а такие системы, как Windows, агрессивно вытесняют фоновые процессы (недостаточно сфокусированные), что часто случалось с пользователями Eclipse.

Пожалуйста, отредактируйте ваш вопрос с информацией о вашей платформе.

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