Embedded Jetty 响应第一个请求的时间太长

问题描述 投票:0回答:0

我们有一个 spring MVC 项目(真的是一个又大又旧的整体),我们目前部署在 Tomcat 服务器上。现在我正在尝试使用嵌入式 Jetty 而不是 tomcat(除了 Jetty 更改之外没有其他代码更改)

搬到码头后,第一个请求或长时间没有负载的请求响应时间过长,通常会超时。

第一次请求的码头响应时间约为。 2 秒(根据进一步的请求减少)

其中 tomcat 需要大约。第一个请求 300 毫秒

还有负载测试(每秒 100 个请求), jetty 的系统负载峰值,因此 CPU 利用率在前几秒达到 60% 到 65%,然后下降到 30%

而 tomcat 能够优雅地承担负载,它始终保持 30% 的 CPU 使用率。

我正在使用

ServerConnector
作为连接器 &
queuedThreadPool with min: 50 , max:500 , queuesize: 6000

尝试过不同的池,队列大小,但没有运气

我可以改变什么来摆脱这种行为吗?

我正在使用码头

9.4.48.v20220622

我的 Jetty 代码


            final String WEBAPP_RESOURCES_LOCATION = "webapp";

            WebAppContext context = new WebAppContext();
            context.setContextPath("/");
            URL webAppDir = Thread.currentThread().getContextClassLoader().getResource(WEBAPP_RESOURCES_LOCATION);
            if (webAppDir == null) {
                throw new RuntimeException(String.format("No %s directory was found into the jar file", WEBAPP_RESOURCES_LOCATION));
            }
            context.setResourceBase(webAppDir.toURI().toString());
            context.setParentLoaderPriority(true);
 
            ThreadPool jettyThreadPool = new QueuedThreadPool(50,200);


            ....
           
     
java spring-mvc tomcat jetty embedded-jetty
© www.soinside.com 2019 - 2024. All rights reserved.