发表于: 2018-10-19 22:57:25
1 314
今日完成:
上午整理了一下代码,在方法中加入时间戳,进行测试。
本次测试使用nginx代理tomcat,使用aop,以及使用时间戳测试方法执行时间,总共点击三次链接,日志记录如下:
tomcat输出日志
service方法用时日志:
综上所述。列表整理
nginx时间统计
nginx | 第一次(/homepage) | 第二次(/u/profession) | 第三次(/homepage) |
时间(ms) | 7 | 44 | 13 |
tomcat | 第一次(/homepage) | 第二次(/u/profession) | 第三次(/homepage) |
时间(ms) | 10 | 47 | 17 |
controller | 第一次(/homepage) | 第二次(/u/profession) | 第三次(/homepage) |
时间(ms) | 3 | 7 | 8 |
第一次调用controller | service1 | service2 | service3 | service4 | service5 | service6 |
用时(ms) | 1 | 1 | 0 | 0 | 1 | 0 |
第二次调用controller | service1 | service2 | service3 | service4 | service5 | service6 |
用时(ms) | 2 | 0 | 0 | 3 | 0 | 0 |
第二次调用controller | service7 | service8 | service9 | service10 | service11 | |
用时(ms) | 0 | 0 | 1 | 0 | 0 |
第一次调用controller | service1 | service2 | service3 | service4 | service5 |
用时(ms) | 1 | 3 | 1 | 0 | 2 |
通过nginx日志记录的时间来看,页面接口较多的耗时相对来说比较长,但是nginx和tomcat的时间记录有差别,tomcat比nginx多花了3ms,这个不知道是什么原因。
从controller记录的时间来看,controller调用service方法所用时间还是比较快的,service执行的总时间会比controler慢一点,1ms左右。
所以大部分时间消耗在了tomcat启动到调用controller并返回结果之间。
网上查了一下tomcat流程:
假设我在客户端输入:http://47.98.251.50/u/profession
1.请求被发到tomcat的8080端口,被tomcat监听器获取
.2.Connector获得请求http://47.98.251.50/u/professionp,将请求转给它所在的service的Engine处理
3.Engine获得请求localhost//u/professionp,将请求转给它匹配的Host处理
4.Host获得请求/u/professionp,匹配它所拥有的所有的Context
5.path=""的Context获得了/u/professionp请求,Context是一个上下文,它加载tomcat的web.xml和app的web.xml,去app的web.xml中匹配servlet,然后匹配该servlet-mapping对应的url-pattern值
6.匹配servlet成功,构造HttpServletRequest对象和HttpServletResponse对象作为参数调用servlet的doGet或doPost方法。调用DispatcherServlet这个类,并且初始化 applicationContext.xml配置文件,DispatcherServlet这个类会分发路径到每个contrller,匹配到这个路径的controller执行处理。
7.controller执行完后,将结果由HttpServletResponse对象返回给host;host将HttpServletResponse对象返回给Engine;Engine再返回给Connector,Connector在将HttpServletResponse对象返回给客户端。
所以说tomcat需要一段时间去加载文件,这也就是为什么tomcat执行的时间要比方法执行的时间多的多。
今天师姐提醒了我,性能测试在服务器上测试时,不要加结果树,之前用jmeter测试时我也在服务器上测试过,因为自己添加了结果树,好像两个接口又设置了150个线程50循环,结果内存溢出,试了几次失败,今天只设置了20线程,重新做了测试,tps明显高了,真是就差那一步。
/usr/local/jmeter/bin/jmeter -n -t /usr/local/jmeter/test/test.jmx -l /usr/local/jmeter/test/result.jtl
20线程50循环
20线程100循环
average在200内,tps也达到了150+
明日计划:
继续学习。
遇到问题:
nginx和tomcat时间有点差别
今日收获:
最大的收获就是之前的jmter测试方法不对,学会了怎么测试,不懂的要多问。
评论