1,新建web 测试项目并且发布到Tomcat,访问路径:http://127.0.0.1:8080/JvmWeb/index
@WebServlet("/index") public class HelloServlet extends HttpServlet { Object object = new Object(); private int count = 0; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(object.hashCode()); System.out.println(++count); } }
2,在Jmeter 中添加项目
Step1: 在Test plan 中 Add 线程组,可以添加线程的数量,以及访问的次数
Step2: 在添加的Thread Group 中添加sample中的Http Request
Step3: 在添加的Http Request中添加Listener中的Summary Report(聚合报告)
3,吞吐量
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
4,测试串行
打开tomcat module ,点击Open launch configuration,VM 配置如下:
-XX:+PrintGCDetails -Xmx32M -Xms1M //堆的初始内存1M 最大内存32 -XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC -XX:PermSize=32M //非堆区内存为32M
gc 回收次数约为28次,Jmeter 运行完其吞吐量为1100 左右
再次设置
-XX:+PrintGCDetails -Xmx32M -Xms32M //堆的初始内存32M 最大内存32M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC -XX:PermSize=32M //非堆区内存为32M
gc 回收次数约为7次,Jmeter 运行完其吞吐量为1300 左右
-XX:+PrintGCDetails -Xmx512M -Xms32M //堆的初始内存32M 最大内存512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC -XX:PermSize=32M //非堆区内存为32M
gc 回收次数约为7次,Jmeter 运行完其吞吐量为1300 左右
结论:垃圾回收次数和设置最大堆内存大小无关,只和初始内存有关系。初始内存会影响吞吐量。
-XX:+PrintGCDetails -Xmx512M –Xms512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC -XX:PermSize=32M
结论:堆的初始值和最大堆内存一致,并且初始堆越大就会高。
并行回收(UseParNewGC)
-XX:+PrintGCDetails -Xmx512M -Xms512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:PermSize=32M GC回收0次 吞吐量6800
CMS收集器 B/S 等待时间少,用户体验好
-XX:+PrintGCDetails -Xmx512M -Xms512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:PermSize=32M
G1回收方式 支持多CPU
-XX:+PrintGCDetails -Xmx512M -Xms512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:PermSize=32M