1. 内存
windows在bin/catalina.bat的注释下第一行加入
set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss128K -XX:PermSize=64m -XX:MaxPermSize=256m
linux在bin/catalina.sh的注释下第一行加入
JAVA_OPTS="-Xms2048m -Xmx2048m -Xss128K -XX:PermSize=64m -XX:MaxPermSize=256m"
这些参数是否生效,可以通过命令jmap -heap 进程ID查看。
最大堆内存和最小堆内存最好设置为一样的。堆内存一般设置为可用内存的80%左右,后面的几个参数根据堆内存进行调整。
2. IO优化
tomcat一共有三种IO策略,bio(默认,兼顾旧jdk,性能差),nio,apr
这里修改为nio:
把 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
改为<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
apr是使用了系统的异步io,需要安装软件,然后在tomcat中配置,我没有使用这种方式。
3. 线程池
在conf/server.xml中打开Executer,并修改参数如下:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
在Connector中使用:
<Connector executor="tomcatThreadPool" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
4. 压缩
在Connector中添加compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
5. 禁用DNS
在Connector中添加enableLookups="false"
最终Connector如下
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000" minProcessors="100" maxProcessors="1000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" connectionTimeout="20000" URIEncoding="utf-8" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true"/>
如此修改后,我的tomcat吞吐量从380/s达到了3800/s,完全扩大了10倍。