架构师训练营 -- 第七周作业
发布于: 2020 年 07 月 20 日
1.性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
随着并发压力增加,系统的响应时间会逐步变大,吞吐量会先变大,到达系统的最大负载点后,又慢慢降下来。
2.用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
import sysimport timeimport requestsimport threading# 记录当前已经完成多少任务g_sum = 0g_result = []R = threading.Lock()def send_request(url): # 发送请求 start_time = time.perf_counter() res = requests.get(url) end_time = time.perf_counter() elapsed = (end_time - start_time) return elapseddef test_thread_func(url): while True: # 判断是否还有任务需要处理 task_id = 0 R.acquire() global g_sum if g_sum <= 0: R.release() break task_id = g_sum g_sum -= 1 R.release() elapsed = send_request(url) R.acquire() global g_result g_result.append(elapsed) print(task_id, elapsed) R.release()def report(result): avg = sum(result) / len(result) print("avg:", avg) result.sort() print("95:", result[95])def main(argv): if len(argv) != 3: print(u"请求格式: URL 请求总次数 并发数") return False url = argv[0] total = argv[1] global g_sum g_sum = int(total) concurrent = argv[2] # 依据并发数,初始化线程 thread_list = [] for i in range(int(concurrent)): test_thread = threading.Thread(target=test_thread_func, args=(url,)) thread_list.append(test_thread) for t in thread_list: t.setDaemon(True) t.start() for t in thread_list: t.join() global g_result report(g_result)if __name__ == "__main__": main(sys.argv[1:])
划线
评论
复制
发布于: 2020 年 07 月 20 日 阅读数: 66
stardust20
关注
还未添加个人签名 2019.11.18 加入
还未添加个人简介
评论 (1 条评论)