jmeter对tomcat性能测试
主要对tomcat的参数做一些记录(jmeter和tomcat在同一个计算机,可能引起测试误差)
我的计算机配置 4核8线程 8G内存
案例一
tomcat JVM 1.8G堆内存,无数据库操作
#最大线程数
server.tomcat.maxThreads =10000
#这个参数是指在同一时间,tomcat能够接受的最大连接数,一般这个值要大于maxThreads+acceptCount
server.tomcat.maxConnections =20000
#当线程数量达到最大线程数时所允许的最大等待队列的长度
server.tomcat.acceptCount =200
#最小空闲线程数
server.tomcat.minSpareThreads =
| 并发数 | 平均响应时间 | 响应时间中位数 | 90%用户的响应时间 | 95%用户的响应时间 | 99%用户的响应时间 | 最小响应时间 | 最大响应时间 | 错误率 | 吞吐量(s) | 每秒发送的数据(KB) | 每秒接受的数据(KB) | |
| HTTP Request | 1000 | 354 | 337 | 850 | 862 | 873 | 1 | 879 | 0.0% | 887.3 | 103.9 | 274.6 |
| HTTP Request | 5000 | 1000 | 1047 | 1725 | 2009 | 2422 | 94 | 2721 | 0.0% | 802.9 | 94.0 | 248.5 |
| HTTP Request | 10000 | 1692 | 1389 | 3265 | 3582 | 3918 | 137 | 6016 | 0.0% | 699.8 | 78.5 | 207.3 |
| HTTP Request | 15000 | 1166 | 945 | 2565 | 2877 | 3958 | 5 | 5347 | 47.3% | 496.7 | 611.7 | 80.9 |
| HTTP Request | 20000 | 1477 | 1355 | 2883 | 3244 | 4273 | 5 | 5298 | 17.7% | 680.2 | 363.8 | 172.2 |
分析:在tomcat允许最大10000线程的情况下,并发数越大,响应时间越长,吞吐量越小。在某时刻会发生连接错误。
案例二
tomcat JVM 1.8G堆内存,无数据库操作
#最大线程数
server.tomcat.maxThreads =800
#这个参数是指在同一时间,tomcat能够接受的最大连接数,一般这个值要大于maxThreads+acceptCount
server.tomcat.maxConnections =20000
#当线程数量达到最大线程数时所允许的最大等待队列的长度
server.tomcat.acceptCount =200
#最小空闲线程数
server.tomcat.minSpareThreads =
| 并发数 | 平均响应时间 | 响应时间中位数 | 90%用户的响应时间 | 95%用户的响应时间 | 99%用户的响应时间 | 最小响应时间 | 最大响应时间 | 错误率 | 吞吐量(s) | 每秒发送的数据(KB) | 每秒接受的数据(KB) | |
| HTTP Request | 1000 | 1806 | 2019 | 2356 | 2410 | 2497 | 975 | 2582 | 0.0% | 385.8 | 45.2 | 119.4 |
| HTTP Request | 5000 | 2353 | 2210 | 3582 | 4159 | 4341 | 618 | 4538 | 49.74% | 874.3 | 1255.4 | 136.0 |
分析:在tomcat允许最大800线程的情况下,并发数不能超过800太多(1000可以),不然会有很多的请求会因为tomcat的接受请求线程全被占用而被tomcat服务器拒绝接受。Address already in use: connect
案例三
tomcat JVM 1.8G堆内存,无数据库操作
#最大线程数
server.tomcat.maxThreads =20000
#这个参数是指在同一时间,tomcat能够接受的最大连接数,一般这个值要大于maxThreads+acceptCount
server.tomcat.maxConnections =30000
#当线程数量达到最大线程数时所允许的最大等待队列的长度
server.tomcat.acceptCount =200
#最小空闲线程数
server.tomcat.minSpareThreads =
| 并发数 | 平均响应时间 | 响应时间中位数 | 90%用户的响应时间 | 95%用户的响应时间 | 99%用户的响应时间 | 最小响应时间 | 最大响应时间 | 错误率 | 吞吐量(s) | 每秒发送的数据(KB) | 每秒接受的数据(KB) | |
| HTTP Request | 20000 | 1638 | 1330 | 3210 | 3872 | 4382 | 4 | 4619 | 13.26% | 717.6 | 311.8 | 192.6 |
| HTTP Request | 15000 | 1597 | 1406 | 315 | 3276 | 4116 | 3 | 4994 | 1.22% | 767.2 | 114.7 | 234.6 |
| HTTP Request | 8000 | 1726 | 1729 | 2905 | 2993 | 4099 | 82 | 4768 | 0.0% | 797.7 | 94.8 | 246.8 |
| HTTP Request | 5000 | 2171 | 2073 | 3423 | 3844 | 4498 | 334 | 4892 | 0.0% | 753.1 | 100.6 | 231.7 |
| HTTP Request | 3000 | 2075 | 2214 | 3265 | 3391 | 3656 | 1 | 3736 | 0.0% | 712.8 | 83.53 | 220.6 |
| HTTP Request | 1000 | 461 | 565 | 843 | 874 | 992 | 2 | 998 | 0.0% | 796.2 | 93.3 | 246.4 |
分析:和案例一相比类似,最大线程数不是越大越好,线程数的增多或导致过多的线程上下文切换,耗费时间。导致单个响应时间的上升。
总结:maxThreads并没有一个最优的值,需要根据系统的配置和项目内容来不断地测试,调整和优化。最终得到合理的配置。在tomcat的配置相同的情况并且相同的并发下,响应时间,错误率,吞吐量也存在较大差异,主要是因为系统的真实环境不同,可能系统本来就有较多线程在运行。
5000并发
jmeter对tomcat性能测试的更多相关文章
- Jmeter之tomcat性能测试+性能改进措施
Jmeter用于tomcat性能测试,因为项目部署在tomcat,正常情况下,一个tomcat可以承受500个并发,通过修改配置,及其相关的tomcat优化,可以承受到1000个并发. 如何测试tom ...
- JMeter学习(十四)JMeter监控Tomcat性能
使用jmeter的tomcat监视器功能,可以通过向tomcat的status页面发送get请求,得到资源使用信息,然后转换为只直观的图像方式,这样的话,就可以监视到服务器的资源使用情况,不过需要注意 ...
- [转]Jmeter + Grafana + InfluxDB 性能测试监控
https://www.cnblogs.com/yyhh/p/5990228.html Jmeter + Grafana + InfluxDB 性能测试监控 效果不错
- 搭建Jmeter + Grafana + InfluxDB性能测试监控环境
背景 Jmeter原生的实时监控每半分钟收集一次数据,只能在Linux控制台查看日志输出,界面看起来不直观,图表报告只能等压测结束后才能生成.如下图为jmeter在Linux下运行的实时日志: 那么如 ...
- Jmeter之数据库性能测试
公司的**产品急待上线,但查询订单操作响应很慢,为了准确定位问题,特对几个大数据查询语句进行性能测试. 环境介绍:数据库用的MYSQL,采用分布式布置,本次单压测一台数据库服务器,查询待支付订单.待消 ...
- Jmeter Http接口性能测试
Jmeter Http接口性能测试 1. 启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...
- 【技术博客】 利用Postman和Jmeter进行接口性能测试
利用Postman和Jmeter进行接口性能测试 作者:ZBW 版本:v1.1 在Phylab的开发过程中,对于生成报告接口的性能考量十分重要.原有的Latex接口虽然生成的报告美观,但编译Latex ...
- JMeter强大的性能测试工具
JMeter强大的性能测试工具,可模拟服务器负载,进行性能测试 配合badboy采集请求数据.
- 基于Docker 部署Jmeter + Grafana + InfluxDB 性能测试监控配置(亲测可用)
工具介绍: InfluxDB:是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, lo ...
随机推荐
- JavaScript初探 二 (了解数据)
JavaScript初探 (二) JavaScript 事件 HTML事件 HTML事件是可以在浏览器或用户做的某些事情 HTML事件的例子: HTML网页完成加载 HTML输入字段被修改 HTML按 ...
- Pi Network有梦想是好的,最新消息和下载注册流程。
(注册流程最下面) ---------------------------------------------------------------------------------- 今日更新(10 ...
- 每天一点产品思考(5):Web端链接跳转在当前页面刷新还是新标签页打开?
一.与交互设计师的突然撕逼 今天阿白在验收产品的时候,在博客首页打开一篇博文,是在原先的页面进行刷新,而不是新开一个标签页打开.阿白让开发改成在新标签页中打开,但是开发说这是设计师设计 ...
- docker介绍和安装(一)
虚拟化简介 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...
- [Go] golang实现mysql连接池
golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连 ...
- Linux常见系统命令和远程管理命令
系统命令 时间与日期: date(查看系统时间) cal (查看本月日历) cal -y (查看一年12个月的日历) 磁盘信息: df -h (查看磁盘剩余空间) #重点放于过载点的/ 目录下 du ...
- 【bzoj4154】(dfs序+kd-tree)
传送门 题意: 给出一颗以\(1\)为根的有根树,初始所有结点的颜色为\(1\). 之后有两个操作,一种是每次将距离\(a\)结点距离不超过\(l\)的所有儿子结点颜色染为\(c\):另一种是询问结点 ...
- scanf函数和cin的区别、类的数组、C++排序函数
给定n个字符串,将这n个字符串按照字典序进行排列,此处用排列函数是C++的库函数sort,产生如下两个疑问,望大佬解答 #include <iostream> #include <a ...
- LG4051/BZOJ1031 「JSOI2007」字符加密 后缀数组
问题描述 BZOJ1031 LG4051 题解 发现这是一个环,根据经验,破环为链,于是字符环变为了字符串 之后对这个复制之后的字符串求后缀数组. $len$代表原字符串长度,代表复制后的字符串长度 ...
- linux常用终端命令
01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也 ...