特定数量的请求后,Jetty服务器9.4.30停止响应

时间:2020-07-27 12:59:26

标签: java jersey jax-rs embedded-jetty jetty-9

我正在开发与REST兼容且与JAX-RS库兼容的嵌入式码头服务器。 但是奇怪的是服务器在1800到2000个请求后停止响应,没有任何错误代码或引发异常。 数据传输是一堆protobuff MapBox矢量图块。尽管即使将空数据传递给客户端,问题仍然存在,而且我几乎可以确定问题不是由于数据库连接池引起的。 Jetty版本是9.4.30.v20200611,启动服务器的代码如下:

package org.maps.server;

import org.eclipse.jetty.server.*;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlets.CrossOriginFilter;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.glassfish.jersey.servlet.ServletContainer;
import org.maps.server.rest.MBTiles;
import org.maps.server.rest.MapLayers;


import javax.servlet.DispatcherType;
import java.util.EnumSet;
import java.util.Objects;


public class JettyServerApp {
    public static void main(String[] args) throws Exception {

        ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS | ServletContextHandler.NO_SECURITY);
        contextHandler.setContextPath("/");

        //Enable CORS
        FilterHolder cors = contextHandler.addFilter(CrossOriginFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
        cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
        cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
        cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD");
        cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin");

//      Welcome files
        ServletHolder def = new ServletHolder("default", DefaultServlet.class);
        def.setInitParameter("resourceBase", "./http/");
        def.setInitParameter("dirAllowed", "false");
        contextHandler.addServlet(def, "/");
        contextHandler.setWelcomeFiles(new String[]{"index.html"});

        ResourceHandler resourceHandler = new ResourceHandler();
        resourceHandler.setDirectoriesListed(true);
        resourceHandler.setWelcomeFiles(new String[]{"index.html"});

        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[]{contextHandler, new DefaultHandler()});

        // initializing thread pool
        QueuedThreadPool threadPool = new QueuedThreadPool();
        threadPool.setMinThreads(10);
        threadPool.setMaxThreads(1000);
        threadPool.setIdleTimeout(120);

        Server jettyServer = new Server(threadPool);
        jettyServer.setHandler(handlers);

        ServerConnector http = new ServerConnector(jettyServer);
        http.setPort(9003);
        jettyServer.addConnector(http);

        // Enabling SSL in Embedded Jetty
        HttpConfiguration httpConfig = new HttpConfiguration();
        httpConfig.setSecureScheme("https");
        httpConfig.setSecurePort(Integer.parseInt(Objects.requireNonNull(PropertyValues.getProperty("port"))));

        HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
        httpsConfig.addCustomizer(new SecureRequestCustomizer());

        SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
        sslContextFactory.setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$");

        ServletHolder jerseyServlet = contextHandler.addServlet(
                ServletContainer.class, "/*");

        jerseyServlet.setInitParameter(
                "jersey.config.server.provider.classnames",
                MBTiles.class.getCanonicalName() +
                        "," + MainPage.class.getCanonicalName() +
                        "," + MapLayers.class.getCanonicalName());


        try {
            jettyServer.start();
            jettyServer.join();
        } catch (Exception e) {
            e.printStackTrace();
            jettyServer.stop();
            jettyServer.destroy();
        }
    }
}

0 个答案:

没有答案