(九) Tomcat 源码系列之 终章:性能优化
Tomcat 的性能优化可以从两个方面去考虑,JVM 优化,Tomcat 配置优化, 没有实际的开发经验和调优经验谈这个也是瞎几把扯淡,由于笔者仍在上大学,这方面接触不深,就不误人子弟了,了解一下即可
可参考 : Tomcat 性能优化
配置优化
在大多数情况下,默认的配置可以满足我们的需求,但遇到特殊情况,就要考虑配置最优的选项了。比如,服务器性能过强,默认配置不能发挥全部性能,这就有点浪费了。常用 Connector 的配置如下 :
maxConnections : 最大连接数,当到达该值时,服务器接受但不会处理更多的请求,额外的请求将会阻塞直到连接数低于该值,默认为 10000
connectionTimeout:网络连接超时时间,单位为毫秒,如果设置为 “0” 则表示永不超时,不建议这样设置,默认为 20000
acceptCount:最大排队等待数,当服务器的请求数量到达 maxConnections, Tomcat 会将请求放入该队列进行排序,默认为 10 。Tomcat 的最大请求处理数量为 maxConnectionns + acceptCount
keepAliveTimeout:保持连接的最长时间,单位为毫秒;
URIEncoding:设置 Tomcat 容器的 URL 编码格式;
disableUploadTimeout:上传文件时是否使用超时机制;
enableLookups:是否启动反查域名机制(取值为 true 或 false),为了提高处理能力,应设置为 false;
bufferSize:定义连接器所提供的输入流中缓存区大小,缺省值为2048个字节;
executor: 使用指定线程池,用于以下配置
maxSpareThreads:最大空闲连接数,如果创建的线程超过这个值,Tomcat 就会关闭不再需要的线程数,缺省值为 50;
maxThreads:最多同时处理的连接数,Tomcat 使每个请求交给线程池处理,这个值表示 线程池可创建的最大的线程数,默认值 150
minSpareThreads:最小空闲线程数,Tomcat 初始化时创建的线程数,该值应该少于maxThreads,缺省值为 4;
压力测试
使用 Apache 的 Bench,在 CentOS 下直接使用 yum -y install httpd-tools
安装 Bench,使用 ab -V
检查是否安装成功,
直接使用命令 ab ‐n 1000 ‐c 100 ‐p data.json ‐T application/json 请求地址
, Bench 将会对请求结果生成测试报告,bench 的参数如下 :
参数 | 含义 |
---|---|
-n | 在测试会话中所执行的请求个数,默认只执行一次请求 |
-c | 一次产生的请求个数,默认一次一个 |
-p | 包含了需要 POST 的数据文件 |
-t | 测试所进行的最大秒数,默认没有时间限制 |
-T | POST 数据所需要使用的 Content-Type 头信息 |
-v | 设置显示信息的详细程度 |
-w | 以 HTML 表的格式输出结果,默认是白色背景的两列宽度的一张表 |
生成的测试报告如下 :
其中的主要指标含义如下 :
指标 | 含义 |
---|---|
Concurrency Level | 并发用户数 |
Time taken for tests | 整个测试持续的时间 |
Complete requests | 完成的请求数量 |
Failed requests | 失败的请求数量 |
Requests per second | 每秒钟平均处理的请求数 |
Time per request | 每个线程处理请求平均消耗时间 |
Requests per second : 吞吐率,服务器并发处理能力的量化描述,单位是 reqs/s,指的是 : 在某个并发用户数下单位时间内处理的请求数。 这个数值表示当前机器的整体性能,值越大越好
Time per request : 用户平均请求等待时间:从用户角度看,完成一个请求所需要的时间 ,该值越小越好
Time per request : across all concurrent requests : 服务器平均请求等待时间:服务器完成一个请求的时间 ,通常等于 上面那个值 / 并发数
JVM 优化
无非就是设置堆内存的大小,调整新生代与老年代的比例,还有新生代晋升到老年代的年龄, 垃圾回收器 …
直接使用jsata -gcutil pid
查看 GC 的执行次数和消耗时间,根据服务器的性能调整参数
或者使用 jmap -heap pid
查看堆内存快照,还可以使用 jconsole 界面查看,