架构师训练营第二期 Week 7 作业

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

随着压力增加,系统响应时间和吞吐量变化会经过以下几个阶段:

1)从0开始到系统最佳运行点之间,系统响应时间没有显著变化,吞吐量大幅增加,因为系统资源还有很多富余,足以快速响应当前请求;

2)从最佳运行点之间到系统最大负载点之间,系统响应时间开始逐渐增加,吞吐量增加开始减慢,但仍然在增加,因为系统资源接近饱和,有些请求开始等待,响应时间增加,但系统仍然有资源处理所有请求;

3)从系统最大负载点到系统崩溃点,系统响应时间明显增加,系统吞吐量降低直至崩溃无法响应请求,因为系统资源已经耗尽,当前请求无法释放,大量请求无法及时得到响应最后超时。



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

if ARGV.length < 3
puts 'Missing arguments. Use "ruby performance_test.rb <concurrent> <request_count> <target_url>" to run the test.'
return
end
require 'net/http'
concurrent = ARGV[0].to_i
request_count = ARGV[1].to_i
target_url = ARGV[2]
jobs = Queue.new
request_count.times { |i| jobs << i }
result = []
workers = concurrent.times.map do
Thread.new do
begin
while i = jobs.pop(true)
start_time = Time.now
Net::HTTP.get(URI(target_url))
end_time = Time.now
result << end_time - start_time
end
rescue ThreadError => e
# Do nothing.
end
end
end
workers.each(&:join)
result.sort!
puts "Average Response Time: #{(result.sum / result.size * 1000).to_i}ms"
puts "95% Response Time: #{(result[result.size * 95 / 100] * 1000).to_i}ms"

最后结果

➜ ruby performance_test.rb 10 100 http://www.baidu.com
Average Response Time: 240ms
95% Response Time: 330ms



用户头像

bigxiang

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二期 Week 7 作业