1、tomcat常用配置参数
<Connector port=“8080" protocol=“org.apache.coyote.http11.Http11NioProtocol”
maxThreads=“600”
minSpareThreads=“100”
maxSpareThreads=“500”
acceptCount=“700”
connectionTimeout=“20000”
redirectPort=“8443” />
参数说明:
protocol=“org.apache.coyote.http11.Http11NioProtocol” 使用java的异步io护理技术,no blocking IO
maxThreads=“600" 表示最多同时处理600个最大线程数
minSpareThreads=“100" 表示即使没有人使用也开这么多空线程等待,初始化时创建的线程数
maxSpareThreads=“500" 表示如果最多可以空500个线程,例如某时刻有505人访问,之后没有人访问了,则tomcat不会保留505个空线程,而是关闭505个空的。 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount=“700” 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
maxConnections:最大连接数
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
tomcat6开始不用的两个参数:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
2、其他相关配置
配置、测试参考该文章:https://mp.weixin.qq.com/s/qr7EQhJAG-mhpzpk23JmDw
(1) 禁用AJP连接,减少资源浪费
将该配置注释掉,然后重启tomcat,刷新tomcat管理页面后,AJP配置消失。
(2)使用执行器(线程池),提高性能
保存退出,重启tomcat,查看管理页面效果
(3)tomcat的三种运行模式
bio: 默认的模式,性能非常低下,没有经过任何优化处理和支持
nio: (new I/O),是Java SE 1.4及后续版本提供的一种新的 I/O操作方式(即java.nio包及其子包),java nio是一个基于缓冲区,并能提供非阻塞I/O操作的java API ,因此nio也被看成是 non-blocking I/O的缩写,它拥有比传统I/O操作(bio)更好的并发运行性能
apr: 安装起来最困难,不过在tomcat8中有最新的nio2,速度更快,建议使用nio2,配置如下
3、性能测试
测试一:
jvm配置默认,tomcat配置如下:
server.connection-timeout=4000
server.tomcat.min-spare-threads=5
server.tomcat.max-threads=10
server.tomcat.max-connections=10
server.tomcat.accept-count=10
测试汇总结果:
测试二:
jvm配置默认,tomcat配置如下:
server.connection-timeout=4000
server.tomcat.min-spare-threads=100
server.tomcat.max-threads=500
server.tomcat.max-connections=10000
server.tomcat.accept-count=1000
测试汇总结果:
测试三:
jvm配置:java -Xms1024m -Xmx1024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:D:/logs/gc.log -jar jarName.jar &,tomcat配置同测试二
测试汇总结果:
测试四:
jvm配置:java -Xms3024m -Xmx3024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:D:/logs/gc.log -jar jarName.jar &,tomcat配置同测试二
测试汇总结果:
以上是在我个人电脑中做的一些测试。从中我们可以发现,不同的tomcat参数和jvm参数配置,其性能发挥是不一样的,好的参数配置,使应用能够更充分的发挥硬件的性能。另外我们在发现性能不足时,可能通过查看服务器监控,找出性能瓶颈并进行针对性的升级优化。还有就是关于tomcat的并发数量问题,如果是在一台性能较好的服务器上,抗住几百的并发应该是完全没有问题的。
4、JMeter的结果树和聚合报告说明
(1) 结果树
Thread Name: 线程组名称
Sample Start: 启动开始时间
Load time: 加载时长,整个请求的消耗时间,从发送到接收完成全程消耗的时间
Latency: 等待时长,不常用,表示从请求发送到刚开始接收响应时的时间
Size in bytes: 发送的数据的总大小
Headers size in bytes: 发送头的大小
Body size in bytes: 发送数据的其余部分的大小
Sample Count: 发送请求数统计
Error Count: 交互错误统计
Response code: 返回码
Response message: 返回信息
Response headers: 返回的头部信息
HTTPSampleResult:附加的请求信息
(2) 聚合报告
JMeter大家可以设置成中文的,以下是英文的版的说明:
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
Samples:表示你这次测试中一共发出了多少个请求
Average:平均响应时间,默认情况下是单个 Request 的平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
95% Line:95% 用户的响应时间
99% Line:99% 用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量,默认情况下表示每秒完成的请求数,Request per Second
KB/Sec:每秒从服务器端接收到的数据量