架构师训练营 第七周作业

用户头像
文江
关注
发布于: 2020 年 12 月 06 日
  1. 性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

系统响应时间会变长,吞吐量会降低,因为系统处理请求时候,需要消耗CPU,内存等硬件资源,随着请求越来越多,系统硬件资源出现瓶颈,比如说内存耗尽,然后频繁和硬盘中的虚拟内存进行交换,导致性能下降。



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

import requests
from numpy import *
from multiprocessing import Process
from multiprocessing import Queue

class BenchMark(Process):
def __init__(self, web_address, num, queue):
super(Process, self).__init__()
self.address = web_address
self.num = num
self.queue = queue

def run(self):
for i in range(self.num):
print("request {0}/{1}".format(i, self.num))
r_time = requests.get(self.address).elapsed.total_seconds()
ms_time = float(r_time)*1000
self.queue.put(ms_time)
print("process done")

class Daemon():

def __init__(self, thread_num, address, request_num, queue):
self.thread_num = thread_num
self.address = address
self.request_num = request_num
self.queue = queue

def work(self):
thread_pool = []
for i in range(self.thread_num):
thread_pool.append(BenchMark(self.address, self.request_num, self.queue))
for each in thread_pool:
each.start()
for each in thread_pool:
each.join()


if __name__ == "__main__":
address = "http://www.baidu.com"
thread_num = 10
request_num = 100
q = Queue()
d = Daemon(thread_num, address, request_num, q)
d.work()
response_time = []
while not q.empty():
response_time.append(q.get())
response_time.sort()
avg_response = mean(response_time)
index_95 = int(thread_num * request_num * 0.95)
print("avg time = {0}ms".format(avg_response))
print("95% response time = {0}ms".format(response_time[index_95]))





发布于: 2020 年 12 月 06 日阅读数: 14
用户头像

文江

关注

还未添加个人签名 2020.04.02 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第七周作业