架构训练营第七周作业
作业一:
性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
解答:
系统响应时间和吞吐量的变化,根据并发数对于硬件资源压力的不同,分为三个阶段。如下图:
性能测试阶段
这个阶段里面,硬件资源还比较富余,也就是说并发还没有完全消耗所有的系统资源。这时候,吞吐量会随着并发数增加而增加,大致呈线性增长。对应图1的a点到b点。
而响应时间则近似保持水平,每个请求都几乎能在最小时间内得到响应。对应图2的起始到b点
负载测试阶段
到达这个阶段以后,硬件资源已经不能完全覆盖所有并发,开始有时间片切换。但是吞吐量还能继续上升,这是因为这个阶段,随着并发增加,可以逐渐把CPU的性能全部发挥出来。但是从图上看,已经从近似直线变成了曲线。对应图1中b点到c点
由于有了时间片切换,有的并发需要等待上下文切换等,响应时间会开始边长。对应图2中b到c点
压力测试阶段
当并发继续增加,CPU时间片切换越来越多。而且这时有可能因为内存不足,需要使用swap或虚拟内存来置换内存,CPU会花很多额外的时间来处理。吞吐量开始从最高点下降,并且一般速度会随着并发增加,下降得很快。对应图1的c点到d点。
响应时间则会大幅增加,因为置换内存等操作特别耗时。对应图2,从c点开始,响应时间大幅增加。当响应时间超过设置的超时时间,也就差不多到了系统崩溃点(d点)
作业二:
用你熟悉的编程语言写一个 Web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
解答:
运行结果
运行代码截图如下:
命令接受3个参数,URL,请求总次数,并发数;输出参数:平均响应时间,95% 响应时间。
源码实现
使用了go语言。httpGet实现如下:
用于实现并发和多次调用的方法如下:
入口main方法:
版权声明: 本文为 InfoQ 作者【一期一会】的原创文章。
原文链接:【http://xie.infoq.cn/article/f3d9afcf095d3dd67b109efd0】。未经作者许可,禁止转载。
评论