架构师训练营 -- 第七周作业

用户头像
stardust20
关注
发布于: 2020 年 07 月 20 日

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

随着并发压力增加,系统的响应时间会逐步变大,吞吐量会先变大,到达系统的最大负载点后,又慢慢降下来。

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

import sys
import time
import requests
import threading

# 记录当前已经完成多少任务
g_sum = 0
g_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 elapsed


def 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:])




用户头像

stardust20

关注

还未添加个人签名 2019.11.18 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,方便分类
2020 年 07 月 21 日 10:51
回复
没有更多了
架构师训练营 -- 第七周作业