写点什么

架构师第 7 周作业

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


随着并发压力的增加,系统响应时间如图成曲线上升,在 b 点之前近似横线,过了 b 点开始上升,过了 C 点急剧上升,而吞吐量在 b 点之前近似线性增加,过了 b 点增加变缓,过了 c 点开始下降。这是因为,一开始服务器资源充裕,每个线程都可以得到调度,cpu/mem/disk/net 资源都够用,不会有阻塞,所以请求快速处理完,并发数越多,处理的请求越多,TPS 越高,当过了某个点,比如线程数超过了 CPU 数,有些线程得不到调度,需要排队等待,响应开始变慢,如果接着增加压力,更多的请求进来,更多的资源被消耗了,比如内存资源如果消耗尽了,请求再进来,就需要用硬盘来虚拟内存,时间就花在了虚拟内存置换上了,随着各种资源的耗尽,花在等待各种资源的时间越来越多,直至系统崩溃。

系统响应时间


吞吐量


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

import sys

import requests

from datetime import datetime

import threading

class stress_test:

def init(self, url, count, iteration, checkpoint):

self.url = url

self.count = int(count)

self.iteration = int(iteration)

self.checkpoint = int(checkpoint)

self.duration = []

def test(self):

begin = datetime.timestamp(datetime.now())

requests.get(self.url)

end = datetime.timestamp(datetime.now())

self.duration.append(end-begin)

print(self.duration)

def stress(self):

tasks = []

for i in range(0,self.count):

task = threading.Thread(target=self.test)

task.start()

tasks.append(task)

for task in tasks:

task.join()


def run(self):

for i in range(0,self.iteration):

self.stress()

def print_result(self):

self.duration.sort()

print(self.duration[self.checkpoint])

print(sum(self.duration)/len(self.duration))


if name == "main":

st = stress_test(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

st.run()

st.print_result()

**********************************

output:

1.46537184715271

0.6422280716896057


用户头像

Geek_xq

关注

还未添加个人签名 2020.10.15 加入

还未添加个人简介

评论

发布
暂无评论
架构师第7周作业