2017-01-26 20 views
0

Мы тестируем нагрузку на наше приложение для веб-служб, и одним из предложений было попытаться сократить время приостановки, чтобы улучшить время отклика.JVM/настройка кода для уменьшения времени подвески JVM

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

  1. Правильно ли предположить, что сокращение времени подвески сократит время отклика?
  2. Есть ли другой способ уменьшить время подвески, отличное от удаления объектов должным образом и быстро.

Наши текущие параметры актуальны JVM являются:

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:NewRatio=2 -XX:+UseTLAB -XX:SurvivorRatio=2 -Dsun.reflect.noInflation=false -Dsun.reflect.inflationThreshold=21474836 -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true -XX:MaxMetaspaceSize=256m -Xms3072m -Xmx3072m -XX:+CMSClassUnloadingEnabled

Благодаря

+2

1. Измерить его. Используйте профилировщик. 2. Настройте GC. –

+0

@ ElliottFrisch Да, мы делаем все это. Что меня интересует, есть ли другой способ уменьшить время приостановки, и наше предположение правильное, что сокращение времени приостановки сократит время отклика – bc004346

+2

У вас действительно есть проблема с временным временем? – EJP

ответ

2

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

Если основной причиной задержки вашего ответа является GC-пауза, то уменьшение количества и длительности ваших периодов паузы GC улучшит время отклика. согласованность времени отклика esp.

Если вы пытаетесь уменьшить типичное время отклика, но вы не получаете GC по каждому запросу, скорее всего, вы хотите настроить свое программное обеспечение, чтобы сделать меньше работы, выделить меньше объектов, использовать алгоритмы с меньшей временной сложностью, избегать сетевых и IO-доступах по каждому запросу.

3

Вы не должны писать код, ориентированный на сокращение срока службы объектов, вы просто должны написать хорошо разработанный код. Тем не менее, я бы рекомендовал использовать шаблон Flyweight, когда это возможно.

Сокращение времени подвески значительно сократит время отклика, когда у вас будет запрос во время полной паузы GC. (Пауза GC увеличит время отклика, так как приложение будет остановлено до тех пор, пока GC не закончится)

Вы можете сфокусироваться на настройке JVM, более точно задав параметры размера кучи (отметьте Java HotSpot VM Options). GC и их варианты могут изменяться в зависимости от вашей версии JDK.