1

Я использую Play 2.4 с впрыском зависимостей и генератором впрыскиваемого маршрута. Но по первому запросу он принимает 1200 мс, и после этого для запросов на тот же маршрут требуется 20 мс. После того, как я отлаживал его больше, я обнаружил, что по первому запросу он загружал около 1000 классов, используя метод java.lang.classLoader.loadClass (String).Воспроизведение 2.4 занимает гораздо больше времени при первом запросе при использовании DI

[Loaded org.jboss.netty.handler.codec.frame.FrameDecoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.replay.ReplayingDecoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpMessageDecoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpRequestDecoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.replay.ReplayError from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.frame.TooLongFrameException from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpChunk from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpChunkTrailer from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpMessageDecoder$State from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpMessage from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.replay.ReplayingDecoderBuffer from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.replay.UnreplayableOperationException from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.oneone.OneToOneEncoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpMessageEncoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.handler.codec.http.HttpResponseEncoder from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.util.CharsetUtil from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.util.CharsetUtil$1 from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.util.CharsetUtil$2 from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 
[Loaded org.jboss.netty.buffer.ChannelBuffers from file:/Users/tushar7795/Reach/reach-api/reach-api-1.0.0/lib/io.netty.netty-3.10.5.Final.jar] 

Это некоторые из классов, которые загружаются с первого запроса. Как я могу загрузить эти классы при запуске приложения?

+0

Я думаю, что эта легкая загрузка классов - это нормальное поведение JVM. Почему вы хотите изменить его? – Kris

+0

Это может быть и от Guice. Вы можете попытаться добавить крючок при запуске, чтобы сделать запрос на самом сервере, чтобы заставить его загружать классы – vdebergue

+0

@Kris, из-за этого, после перезапуска сервера, тот, кто делает первый запрос, должен слишком долго ждать. Кроме того, он также испортил среднюю статистику времени ответа в newrelic. –

ответ

0

Если вы не хотите, чтобы ваши первоначальные запросы к приложению занимали больше времени из-за ленивой загрузки JVM, одним из решений является создание внешнего скрипта, который разогревает ваше приложение и не возвращает 200 на проверку работоспособности до разминки закончен. Другим способом является создание акк-актера, который разогревает ваше приложение. Вы можете инициализировать этого актера, используя метод «забыть о путях» (сказать) после запуска приложения и так же, как указано выше, завершить проверку работоспособности до тех пор, пока разминка не закончится, чтобы ELB не начинал перенаправление запросов к этому экземпляру.