九月底面华为的时候被问到了Tomcat调优,答得不好,趁着十一国庆这几天简单的研究了一下,现在总结下。
Tomcat的优化分成Tomcat启动命令行中的优化参数即JVM优化以及Tomcat容器自身参数的优化。这里分别对我本机(Win10)上以及学院集群上(Redhat)的Tomcat进行调优
1.1本机(Win10)Tomcat调优
Tomcat首先跑在JVM之上的,因为它的启动其实也只是一个java命令行,首先我们需要对这个JAVA的启动命令行进行调优,修改catalina.bat(apache-tomcat-9.0.0.M22\bin),添加启动参数
set JAVA_OPTS=-server -Xms5000M -Xmx5000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking
参数解释:
1)-Xms&-Xmx:设置初始堆大小&最大堆大小
2)-Xss:设置线程栈大小
3)-XX:+AggressiveOpts:使用最新加入的优化技术
4)-XX:+UseBiasedLocking:优化线程锁
记得从startup.bat启动tomcat。如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS没起作用。 windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.。
启动参数有好多,这里简单设置了几个常用的,后面有时间再调试其他参数。
接下来进行Tomcat容器内的优化,增加吞吐量。打开tomcat安装目录\conf\server.xml文件,定位到这一行:
<Connector port="8080" protocol="HTTP/1.1"
改为
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
useURIValidationHack="false"
compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443"
/>
参数解释:
1)URIEncoding=”UTF-8”:使得tomcat可以解析含有中文名的文件的url
2)maxSpareThreads:如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
3)minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数。
4)connectionTimeout:网络连接超时时间毫秒数
5)maxThreads:使得tomcat可以解析含有中文名的文件的url
6)maxSpareThreads:表示Tomcat可创建的最大的线程数,即最大并发数。
7)acceptCount:当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小。
1.2本机(Win10)JMeter测试结果
利用压力测试软件Jmeter模拟2000*100个线程请求不断的访问localhost:8080。运行结果截图可得::
调优前
调优后
参数解释:
1)Samples:表示你这次测试中一共发出了多少个请求,这里模拟了100个用户,每个用户迭代2000次,那么这里显示200000。
2)Average:平均响应时间——默认情况下是单个 Request 的平均响应时间。
3)Max:最大响应时间.
4)Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)。
由于是本机测试发布服务本机测试,测试结果很可能不精确。但是通过Throughput可见调优后的Tomcat吞吐量明显提高了。
2.1Linux服务器(Redhat)Tomcat调优
与Windows上Tomcat调优类似,首先我们需要对这个JAVA的启动命令行进行调优,修改catalina.sh(apache-tomcat-9.0.0.M22\bin),添加启动参数
set JAVA_OPTS=-server -Xms50000M -Xmx50000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+CMSParallelRemarkEnabled
因为集群主节点内存为64G,这里通过free -m命令查看Linux集群内存使用情况,这里设置的最大内存=free+cached+buffers,设置为40000M,除此之外添加了+UseConcMarkSweepGC(设置CMS并发收集器)。
对Linux上的Tomcat进行JAVA的启动命令行调优后,进行Tomcat容器内的优化,优化内容与Windows上一致。
2.2Linux服务器(Redhat)JMeter测试结果
利用压力测试软件Jmeter模拟200*100个线程请求不断的访问Linux服务器的Tomcat服务。运行结果截图可得::
调优前
调优后
可见在Linux服务器上进行调优后,无论是平均响应时间还是吞吐量都有了小幅的提升。
分别在本机(Win10)以及服务器(Linux)对Tomcat启动命令行中的优化参数进行优化并对Tomcat容器自身参数进行优化后,吞吐量都得到了小幅的提升。提升量不大可能与调优参数设置不精确有关。而本机(Win10)调优后响应时间小幅上升可能与本机测试占用资源有关。
参考博文:http://blog.csdn.net/centre10/article/details/50639693
http://blog.csdn.net/u013802160/article/details/51701644