• Jetty嵌入式开发及参数设置


    已转移

    Jetty嵌入式开发

    嵌入Jetty服务,通常执行下面的步骤:

           1)创建一个服务

           2)添加和配置服务器线程池

           3)添加和配置处理器

           4)添加和配置Servlet、Webapp到处理器

           5)添加和配置连接器

           6)启动服务

           7)等待(join服务防止主线程退出)

    Jetty参数设置

    线程池(ThreadPool 
           线程池线程资源大小确定了服务器的服务能力,默认大小不一定能满足生产环境,线程分配方式决定了服务器的资源利用效率,jetty自带的线程池QueuedThreadPool。

    minThreads:最小线程数,默认10
    maxThreads:最大线程数,默认200
    detailedDump:表示是否记录详细的thread dump,默认false不记录。

    连接器(Connector)

        Connector主要分两类,BIO(同步阻塞IO)模式和NIO(异步阻塞IO)模式。
    BIO模式的Connector有:
        ScoketConnector (HTTP)
        Ajp13SocketConnector (AJP)
        SslSocketConnector (SSL)
    NIO模式的Connector有:
        SelectChannelConnector (HTTP)
        SslSelectChannelConnector (SSL)

    注意,如果配置多个Connector的话,建议各个Connector共享同一个线程池,即需要在Connector中指定线程池的名称,如:
    各参数的含义:
    host:jetty所在主机的IP或主机名;
    port:设置jetty的端口号;
    maxIdleTime:表示连接最大空闲时间,单位是ms,默认值300000这个值太大,典型值3000左右足够;
    acceptors:接收线程数量,Acceptor的功能是接收客户端连接然后分配个给ThreadPool处理,表示同时在监听read事件的线程数,缺省值为2,对于NIO来说,建议值2*(处理器核数-1);或者小于等于2*处理器核数;
    acceptQueueSize:在OS发起拒绝连接之前,请求连接排队的数量;
    statsOn:是否开启统计功能,调优时建议关闭统计功能。默认关闭
    confidentialPort:受信端口号;
    lowResourcesConnections:  连接数量达到该数值时,Jetty会认为服务器资源已被耗尽。只有NIO才有这个设置,表示连接空闲时的最大连接数,大于这个数将被shutdown,每个acceptor的连接数=(lowResourcesConnections+acceptor-1)/ acceptor。
    lowResourcesMaxIdleTime:表示可用线程稀少时或者当资源饱和时,连接最大等待时间,时间单位是毫秒,一般设置为<= maxIdleTime; 处理器(Handler)

    Handler分为三类:
    内容输出Handler
    该类Handler根据target输出内容。如:ResourceHandler、ServletHandler、DefaultHandler等。这些类都是直接对Handler接口进行实现。
    装饰模式Handler
    该类Handler可以选择在交给另外一个Handler对象调用前或后来处理Request和Response。这些类都继承自HandlerWrapper类。
    集合类Handler
    该类Handler的作用是讲请求分发给其他Handler处理,分发策略由各自实现类决定。常用集合类Handler有HandlerCollection、HandlerList、ContextHandlerCollection。

    示例代码:

    Server server = new Server(DataCenterConfig.getHttpPort());
            QueuedThreadPool threadPool = new QueuedThreadPool();
            threadPool.setMaxThreads(250);
            threadPool.setMinThreads(25);
            server.setThreadPool(threadPool);
            ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
            context.setContextPath("/");
            server.setHandler(context);
            context.addServlet(new ServletHolder(new CheckFileServlet()), "/check");
            context.addServlet(new ServletHolder(new UploadFileServlet()), "/upload");
            context.addServlet(new ServletHolder(new DownloadFileServlet()), "/download");
    
            context.addFilter(AuthFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
            SelectChannelConnector connector = new SelectChannelConnector();
            connector.setPort(DataCenterConfig.getHttpPort());
            connector.setAcceptors(4);
            connector.setAcceptQueueSize(2500);
            connector.setThreadPool(new QueuedThreadPool(100));
            connector.setName("JettyHttpServer");
            connector.setLowResourcesConnections(10240);
            server.setConnectors(new Connector[]{connector});
    
            server.start();

    参考:https://blog.csdn.net/xinfeixiang201411/article/details/80015675

     Jetty 的工作原理以及与 Tomcat 的比较  https://www.ibm.com/developerworks/cn/java/j-lo-jetty/

    Jetty 的工作原理以及与 Tomcat 的比较

  • 相关阅读:
    Win10 字体模糊解决(DPI缩放禁用),设置默认输入法英文
    windows下使用VS2015编译V8 JavaScript引擎(v5.5
    GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
    wget 显示"英国中部时间",去掉烦人的刷屏显示
    阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
    CSS
    bootstrap4 调整元素之间距离
    数据库文件结构、sqlserver ON [PRIMARY]
    快速查看数据库中每个表的数据条数
    关于LINQ中SELECT NEW 的问题
  • 原文地址:https://www.cnblogs.com/xyfaneast/p/11127984.html
Copyright © 2020-2023  润新知