写点什么

架构一期第七周作业

用户头像
Airs
关注
发布于: 2020 年 11 月 08 日

作业一(至少完成一项):

  1. 性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

· 随着并发压力的增加,直接线性相关的就是线程数增加,随着线程数增加,系统资源被消耗,导致响应时间增加,吞吐量随着增加而减少直至程序崩溃其中可以分为三个阶段:

  1. 性能测试阶段:随着并发增加,系统资源消耗中等,还有足够的能力处理请求,系统响应时间增加不明显,吞吐量随着并发增加而增加。

  2. 压力测试阶段:随着并发增加,系统资源消耗接近上限,系统状态繁忙,系统响应时间增加明显,吞吐量虽然增加但是不明显并且趋于稳定。

  3. 负载测试阶段:随着并发增加,系统资源消耗到达并可能超过上限,系统状态非常繁忙,系统响应时间增大量增加,由于已经达到处理上限,请求开始排队,吞吐量不在增加,并由于请求等待,吞吐量可能开始下降。

  4. 用你熟悉的编程语言写一个 Web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。

from concurrent.futures import ThreadPoolExecutor,waitimport timeimport requests
def get_request(times): # print("开始第" + str(times) + "次请求") starttime = time.time() response = requests.get("https://www.baidu.com/") # 执行请求 endtime = time.time() time_log.append(endtime - starttime) # 计算请求耗时并添加到耗时列表中 # print(endtime - starttime) # print("第" + str(times) + "次请求结束")
def avg_cal(list): nsum = 0 for i in range(len(list)): nsum += list[i] return nsum / len(list)
if __name__ == '__main__': time_log = [] # 记录每次请求耗时的空列表 thread_count = 10 # 设置线程池中线程数,即并发数量 get_times = 100 # 设置需要请求的总次数 executor = ThreadPoolExecutor(max_workers=thread_count) # 创建线程池 all_task = [executor.submit(get_request,i+1) for i in range(get_times)] # 给线程池中提交任务 wait(all_task) sorted_list = sorted(time_log, reverse=True) avg = avg_cal(time_log) p95 = sorted_list[int(len(time_log)//(100/95))] print(str(get_times) + "次请求平均耗时为:" + str(avg)) print(str(get_times) + "次请求耗时P95:" + str(p95))

复制代码

结果:


作业二:根据当周学习情况,完成一篇学习总结


发布于: 2020 年 11 月 08 日阅读数: 32
用户头像

Airs

关注

Emmmmmmm 2018.02.28 加入

Emmmmmmm

评论

发布
暂无评论
架构一期第七周作业