jetty是一个轻量级的java web容器,已经变得越来越流行,比较好的一点是它可以作为组件嵌入到java应用中,而不需要像tomcat一样将web项目部署到某个目录下,当然 tomcat也有自己的embeded版本。Google甚至选择了jetty而放弃了tomcat,可见jetty的受欢迎程度。下面提供一个spring集成jetty应用的一种方式,场景是,web server情况下,jetty接受请求,处理后返回xml或json格式的响应。
<bean id="JettyServer" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop"> <property name="threadPool"> <bean id="defaultThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <property name="minThreads" value="10" /> <property name="maxThreads" value="200" /> </bean> </property> <property name="connectors"> <list> <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <property name="port" value="8081" /> <property name="maxIdleTime" value="30000" /> <property name="lowResourcesConnections" value="5000" /> <property name="lowResourcesMaxIdleTime" value="5000" /> <property name="acceptors" value="4" /> <property name="statsOn" value="false" /> <property name="acceptQueueSize" value="500" /> </bean> </list> </property> <property name="handler"> <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerList"> <property name="handlers"> <list> <bean class="com.ztgame.centralserver.joint.JointHandler" /> <bean class="org.eclipse.jetty.server.handler.DefaultHandler" /> <bean class="org.eclipse.jetty.server.handler.RequestLogHandler"> <property name="requestLog"> <bean class="org.eclipse.jetty.server.NCSARequestLog"> <property name="append" value="true" /> <property name="filename" value="/log/rat/jetty.log.yyyy_mm_dd" /> <property name="extended" value="true" /> <property name="retainDays" value="999" /> <property name="filenameDateFormat" value="yyy-MM-dd" /> </bean> </property> </bean> </list> </property> </bean> </property> </bean>
关于高负载下jetty的配置,可以参考如下文档,包括对linux服务器tcp的一些限制修改,以及jetty自身connector的配置。
分析了jetty的源代码,默认acceptQueueSize的大小为50,但是在高负载下,这个值是远远不够的,看到过一个1000 r/s的场景,将这个值设为12000。因此可以根据实际情况调大这个值。
http://wiki.eclipse.org/Jetty/Howto/High_Load
http://docs.codehaus.org/display/JETTY/HighLoadServers