如何通过JMeter和JConsole测试监控Tomcat的性能
1、准备一个基于SpringBoot的web应用来测试Tomcat的相关指标
快速创建一个基于SpringBoot的web应用,并将其启动类声明为为一个 RestController,补充一个请求处理方法(RequestMapping),在请求url中指明了一个数字类型的请求参数,通过这个参数控制线程sleep的时间,以此模拟实际业务处理所需的时间(图示)。
关于如何基于SpringBoot快速创建web应用,可以参考如下经验引用。

2、同时为了更好地对比业务处理时间(上述参数控制的延迟时间)和线程个数的关系,我们需要调整一下tomcat默认的业务线程池最大线程数(默认200),在工程 resources 目录下的 application.properties 文件中添加如下信息 (图示):
server.tomcat.max-threads=1000

3、配置SpringBoot启动参数,并启动应用(图1示),启动JConsole,使用远程连接的方式监控SpringBoot内置的Tomcat (图2示,具体操作可以参考如下经验引用)


4、启动并配置 JMeter
1. 配置 Thread Group (虚拟用户组) 为 100,Loop Count 勾选 forever (持续发送请求,除非手动暂停,图1示)
2. 配置 HTTP Request,分3次测试,配置 url 让请求在后台分别延时2秒、4秒和6秒返回,注意同时需要配置响应超时为1秒,这样可以保持恒定的请求吞吐量 (图2、3示)
3. 配置 View Results Tree 和 Aggregate Report 用于查看结果
注意,更具体详细的 JMeter 配置请查看如下经验引用



5、启动JMeter测试,并通过JConsole观察tomcat中内存,线程以及cpu的变化
1. 启动后台延时2秒的测试请求,执行30秒钟,停止2分钟
2. 启动后台延时4秒的测试请求,执行30秒钟,停止2分钟
3. 启动后台延时6秒的测试请求,执行30秒钟
图示,即JConsole显示的相关测试结果。

6、总结:
1. 从线程数量上看,随着后台业务处理时间的增长,tomcat线程池的线程数量也会同步增加,如果自身业务处理逻辑没有改变,但线程数量突然增加,则有可能是依赖的服务出现延时增加的情况。
2. 从内存上看,因为上述测试后台并没有大量创建对象,因此这里显示的内存消耗主要是创建线程导致的
3. cpu消耗,上述测试后台并没有很复杂的业务处理逻辑,并且客户端吞吐量恒定,cpu的消耗并没有出现很大波动