写点什么

训练营第七周作业

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

公式:


有几个节点:系统最佳运行点-->B,系统最大负载点 -->L


  • T <= 系统达到系统最佳运行点: 系统响应时间几乎不变,吞吐量逐渐变大

  • 系统最佳运行点<=T<=系统最大负载点: 响应时间缓慢变大,吞吐量缓慢降低

  • T >=系统最大负载点: 响应时间快速变大,吞吐量缓慢降低


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


package com.test;
import okhttp3.OkHttpClient;import okhttp3.Request;import org.apache.commons.cli.*;
import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.*;
/** * @author liucheng.zhang * @since 2020-12-04 **/public class WebBenchmark { public static void main(String[] args) {
OkHttpClient okHttpClient = new OkHttpClient();

Options options = new Options();
Option url = new Option("u", "url", true, "url"); url.setRequired(true); options.addOption(url);
Option concurrent = new Option("c", "concurrent", true, "concurrent"); concurrent.setRequired(true); options.addOption(concurrent);
Option total = new Option("t", "total", true, "total"); total.setRequired(true); options.addOption(total);
CommandLineParser parser = new DefaultParser(); HelpFormatter formatter = new HelpFormatter(); CommandLine cmd;
try { cmd = parser.parse(options, args); int c = Integer.parseInt(cmd.getOptionValue("concurrent")); int t = Integer.parseInt(cmd.getOptionValue("total")); String u = cmd.getOptionValue("url"); Request request = new Request.Builder().url(u).build(); ExecutorService executorService = Executors.newFixedThreadPool(c); List<Future<Long>> futures = new ArrayList<Future<Long>>(); for (int i = 0; i < t; i++) { Future<Long> future = executorService.submit(() -> { long start = System.currentTimeMillis(); okhttp3.Response response = okHttpClient.newCall(request).execute(); long r = System.currentTimeMillis() - start; response.close(); return r; }); futures.add(future); } List<Long> result = new ArrayList<>(); Long totalTime = 0L; for (Future<Long> future : futures) { try { while (!future.isDone()) ; final Long l = future.get(); totalTime += l; result.add(l); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } }
Collections.sort(result);
System.out.println("avg:" + (totalTime / t) + "ms,95%:" + result.get((int) (0.95d * t) - 1)+"ms");
} catch (ParseException e) { System.out.println(e.getMessage()); formatter.printHelp("utility-name", options); System.exit(1); } System.exit(1); }}
复制代码


输出:

avg:64ms,95%:483ms
复制代码


用户头像

大脸猫

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

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