发表于: 2016-04-26 22:24:26

1 2611


【操作步骤】
1.了解Redis,参考文档:http://www.yiibai.com/redis/
2.压力测试结果记录:(测试接口:ITtask_4/pages/home;断言持续时间:500ms)
  测试环境:ITtask_4项目部署在本地jetty(端口号:8080)和tomcat(端口号:9090)上,使用jmeter进行压力测试。为了得到稳定的TPS数据,我把线程组的循环次数设置为永远循环,然后观察聚合报告中的数据变化。
  测试结果:(1)不启动Memcache,不启动Nginx,响应时间限定在500ms内。当线程数达到23左右时,就开始出现error,Throughtput稳定值约为166/s,90% Line为209ms。(2)启动Memcache,不启动Nginx,响应时间限定在500ms内。当线程数达到460左右时,开始出现error,Throughtput稳定值约为738/s,90% Line为46ms。
  分析:对比启动Memcache前后jmeter数据变化,可以发现,启动Memcache后,能够容纳更高的线程数,而且Throughtput值也大幅度提升,90% Line大幅度缩减。能够很明显感觉到Memcache对性能的优化。


【知识总结】
1.<stackoverflow>上关于JMeter线程数的一些回答:
    1.1 最大线程数取决于操作系统、内存。详细内容:
        (1)your machine power 计算机本身的性能
        (2)your jvm 32 bits or 64 bits java虚拟机版本是32位还是64位
        (3)your jvm allocated memory -Xmx 给java虚拟机分配的内存
        (4)your test plan (lot of beanshell, post processor, xpath... Means lots of cpu) 测试计划的复杂度
        (5)your os configuration (tunable) 操作系统
        (6)Gui / non gui mode 是否使用了JMeter图形化界面
    1.2 Win XP上最大连接数在3000以内,Linux上可以达到3000以上。
    1.3 在提高线程数的同时注意CPU使用,不要让CPU负载达到100%.尽量控制在80%~90%之间。负责会出现虚假结果。
    1.4 线程数不要过大,会出现虚假结果。

2.我自己分别在win7系统和ubuntu系统上测试了一下,当在云服务器上部署项目后,在win7和ubuntu上分别利用jmeter对服务器上的http请求进行压测,能够发现ubuntu上的jmeter的确能够承载更多的线程数,但是线程数一提高的话,响应时间就会大幅度提高。因此,我觉得在进行jmeter压力测试时,应该注意以下几点:
    2.1 在task6中,我们是想知道缓存对程序性能优化的影响,所以只要控制好其他变量(操作系统、电脑硬件、要测试的请求、响应时间限制),然后来比较启动Memcache和不启动Memcache的压测结果。
    2.2 我觉得在压测时,必须要限定响应时间,在我的ubuntu系统上,如果只压测一个请求,我甚至能够把线程数增加到4400条,但是增加到这么多后,最大的响应时间甚至会有近20s,我觉得这个没有什么意义,应该把响应时间限制在500ms内进行压测。
    2.3 聚合报告中的Throughput数据和TPS还是有区别的。Throughtput表示的是每秒处理的请求数目,而TPS表示的是每秒处理的事务数目,一个http请求中可能包含有好几个事务。但二者作用其实一样。
    2.4 在相同的线程数下,压测结果会有不同,所以应该保持线程数不变多测几次,取稳定结果。


【出现的问题(已解决)】






【出现的问题(未解决)】





【疑问】
1.老大,通过压力测试,我能感觉到Memcache带来的优化,但是我不能感觉到Nginx带来的优化。
  我是这样利用Nginx的,在不启动Nginx之前,我测试的接口是localhost:8080/ITtask_4/pages/home,在启动了Nginx后,我测试的接口是localhost/ITtask_4/pages/home,在Nginx中我设置的upstream中有两个服务:一个是localhost:9080,是我部署在本地tomcat上的项目;一个是localhost:8080,是我部署在本地jetty上的项目。
  我心里想的是,在启动Nginx后,如果我调用localhost/ITtask_4/pages/home接口,Nginx会分别调用tomcat和jetty上的服务,这样就实现了负载均衡。如果这样的话,那么理想状态下测试结果应该是这样的:在未启动Nginx时,线程数增加到50个就会出现error,启动Nginx后,线程数可以翻一倍,增加到100个才会出现error。这个是我心里想的理想结果。
  但是实际测试中,如果我测试localhost:8080/接口,线程数可以增加到460(启动了Memcache),测试localhost/接口,线程数并不能提高,而且Throughtput还会略微下降,我感觉负载均衡并没有带来任何性能优化。
  出现这种原因很可能是因为我虽然部署了两台web,但都是在本地的一台机器上,所以不会有很明显的性能优化。
  老大,是不是这个原因?


返回列表 返回列表
评论

    分享到