发表于: 2018-10-19 22:57:25

1 314


今日完成:

上午整理了一下代码,在方法中加入时间戳,进行测试。

本次测试使用nginx代理tomcat,使用aop,以及使用时间戳测试方法执行时间,总共点击三次链接,日志记录如下:

nginx
tomcat访问日志

tomcat输出日志

service方法用时日志:

综上所述。列表整理

nginx时间统计

nginx
第一次(/homepage)
第二次(/u/profession)
第三次(/homepage)
时间(ms)
7
44
13
tomcat时间统计
tomcat
第一次(/homepage)
第二次(/u/profession)
第三次(/homepage)
时间(ms)
10
47
17
controller
controller
第一次(/homepage)
第二次(/u/profession)
第三次(/homepage)
时间(ms)
3
7
8
service方法时间统计:
第一次调用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测试方法不对,学会了怎么测试,不懂的要多问。


返回列表 返回列表
评论

    分享到