Tomcat压力测试
Jmeter压力测试工具
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
下载
https://jmeter.apache.org/download_jmeter.cgi
下载binaries包,而不是src包。
使用
下载后,解压,再双击bin\jmeter.bat即可。
启动后程序界面
测试
导入servletjar包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
将项目添加web支持,右键项目添加支持
勾选Web应用,确定
ctrl+shift+alt+s打开项目结构,选择Artifacts,在当前项目的WEB-INF文件夹下添加lib文件夹,再点加号,把所有的包导入
写一个测试用的Servlet
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("do get..");
}
}
启动tomcat服务器
这些都是javaEE的内容了就不细写了…
访问url,我的站点是http://localhost:8080/biguanxiulian_2_war_exploded/index
会打印输出do get…
那么web就启动起来了
回到jmeter,右键test plan,添加线程组
配置线程组参数,线程数设为10(太大会卡),运行时间1s不改,每个线程跑1000次
右键线程组,添加Sampler中的HTTP请求
配置HTTP请求,填写ip地址,端口和全路径
右键HTTP请求,添加监听器中的聚合报告
点击绿色箭头运行,保存文件
结果(我点了3次了,其实最好点一次就行了)Samples:请求次数3万次,Throughput吞吐量表示每秒能执行多少的请求,可以看到此时吞吐量为1876/s
写在后面:
jmeter只是一个工具,多用用都能会。做开发的话了解即可,做测试再系统学吧,摆个别人做的博客在这里,有空再看看
https://blog.csdn.net/qq19970496/article/details/101530157
Tomcat参数调优测试-串行回收
紧接上面的例子
jmeter测试做了点改动,线程数加到100了,每个线程依然跑1000次,10个线程太少了,具由偶然性。(线程数多吞吐量会大一些)
先什么都不配,默认来测一次,吞吐量在7500左右
下面是模拟环境问题:
配置参数
-XX:+PrintGCDetails
-Xms32M
-Xmx32M
-XX:+UseSerialGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:PermSize=32M
启动起tomcat,用jmeter进行测试,吞吐量6626/s
扩大堆内存
-XX:+PrintGCDetails
-Xms32M
-Xmx512M
-XX:+UseSerialGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:PermSize=32M
重启tomcat,再次用jmeter测试,新开一个aggregate report,见下图,吞吐量6693/s
很明显的扩大堆内存吞吐量会有微小的提升。
另外有个有趣的现象:Xms初始值一样为32M,启动tomcat时GC回收次数是相同的。初始值相等,启动流程相同,分配内存所需空间相同,所以GC回收次数是相同的。所以一般项目中Xms=Xmx。
调整初始值和最大值一样
-XX:+PrintGCDetails
-Xms512M
-Xmx512M
-XX:+UseSerialGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:PermSize=32M
jmeter测试结果,不出意外结果是最好的,吞吐量6918/s
Tomcat参数调优测试-并行回收
并行回收:
一样得配置参数,这次使用并行回收UseParNewGC,看看结果
-XX:+PrintGCDetails
-Xms256M
-Xmx512M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParNewGC
-XX:PermSize=32M
结果
并行合并收集器,并配置GC线程数(GC线程数一般配成等于cpu核心数*2):
-XX:+PrintGCDetails
-Xms256M
-Xmx512M
-XX:+HeapDumpOnOutOfMemoryError
-XX:PermSize=32M
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:ParallelGCThreads=8
吞吐量波动在6600到7200左右
(这个估计是因为我后台开了太多应用了,现在内存占用已经85%了,有波动是正常的,所有测试的时候尽量保持在一个纯净的环境。)
做完测试后发现,其实默认情况已经挺快的了,由于对比测试中配置的时候最大内存限制在了512M,所以吞吐量还不如默认的情况,实际开发中内存一般会尽量调大。