1. 线程池
线程池线程资源大小确定了服务器的服务能力
默认大小不一定能满足生产环境
线程分配方式决定了服务器的资源利用效率
固定线程数处理多任务,代表:JDK的ThreadPoolExecutor
以最大的线程数为限处理多任务,代表:jetty自带的QueuedThreadPool
jetty中的配置实例:
#######################################################################
########################################################################
默认最大的线程才200个,肯定不能满足我们的生产环境,建议范围500-900
2. Connectors
选择Connector时,需要考虑
应用自身的特点,例如:股票,聊天室
Tcp连接数
Keep-Alive
Java BIO Connectors
ScoketConnector (HTTP)
Ajp13SocketConnector (AJP)
SslSocketConnector (SSL)
Java NIO Commectors
SelectChannelConnector (HTTP)
SslSelectChannelConnector (SSL)
jetty中得默认配置:
########################################
############################################################
jetty.port: 设置jetty的端口号.
maxIdleTime:表示连接最大空闲时间,默认值300000这个值太大,典型值3000左右足够.
Acceptors: 表示同时在监听read事件的线程数,缺省值为2,对于NIO来说,建议值2-(处理器核数+1).
lowResourcesMaxIdleTime:表示线程稀少时的maxIdleTime,一般设置为 <= maxIdleTime.
lowResourcesConnections: 只有NIO才有这个设置,表示连接空闲时的最大连接数,大于这个数将被shutdown,每个acceptor的连接数=(lowResourcesConnections+acceptor-1)/ acceptor
这个我们就保持默认设置就可以.
3. JVM调优
JVM参数主要是 堆/栈内存大小调整
-Xmx/xms 最大/最小堆大小
-xmn 新生代大小
-XX:MaxPermSize 持久代堆大小
Jetty中的默认设置
###############################
# --exec
# -Dcom.sun.management.jmxremote
# -Dorg.eclipse.jetty.util.log.IGNORED=true
# -Dorg.eclipse.jetty.util.log.stderr.DEBUG=true
# -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
-Xmx2048m
-Xmn1024m
# -verbose:gc
# -XX:+PrintGCDateStamps
# -XX:+PrintGCTimeStamps
# -XX:+PrintGCDetails
# -XX:+PrintTenuringDistribution
# -XX:+PrintCommandLineFlags
# -XX:+DisableExplicitGC
# -XX:+UseConcMarkSweepGC
# -XX:ParallelCMSThreads=2
# -XX:+CMSClassUnloadingEnabled
# -XX:+UseCMSCompactAtFullCollection
# -XX:CMSInitiatingOccupancyFraction=80
#######################################
jetty启动脚本:
java -Djetty.home=/usr/local/jetty7 -Djava.io.tmpdir=/tmp –Xmn1024M –Xms2048M –Xmx2048M -XX:PermSize=512M -XX:MaxNewSize=1024M -XX:MaxPermSize=1024M -Djava.awt.headless=true -jar /usr/local/jetty7/start.jar --pre=etc/jetty-logging.xml jetty.port=8080 &