第 7 周作业一
发布于: 2020 年 07 月 22 日
一、性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?
性能压测随着并发压力的增加,
系统响应时间会持续上升,也会分为几个阶段:系统稳定阶段、系统最大负载点、系统崩溃点。在系统崩溃点出现之后,系统响应时间无限增大。 系统的吞吐量:首先系统的吞吐量计算公式:吞吐量=(1000/响应时间ms)*并发数 可以看出吞吐量跟并发数和响应时间存在一定关系,在并发压力不断增加的情况下,当未达到压力测试的临界点的时候,吞吐量是增加的,当达到临界点时吞吐量下降。
二、用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com。
package com.rudy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;/* 用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。 输出参数:平均响应时间,95% 响应时间。 用这个测试工具以 10 并发、100 次请求压测 www.baidu.com */public class PerformancePressureTool implements Runnable { private ArrayList<Long> longs = null; private String urlStr; //请求Url private int requestCount; //请求数 private int concurrentCount; //并发数 private int receiveCount; //到达数 private int needReciveCount; //需要到达数 public PerformancePressureTool(String urlStr, int requestCount, int concurrentCount, int needReciveCount) { if (longs == null) { longs = new ArrayList<>(); } this.urlStr = urlStr; this.requestCount = requestCount; this.concurrentCount = concurrentCount; this.needReciveCount = needReciveCount; } public void onCallback(long time) { longs.add(time); receiveCount++; if (receiveCount == needReciveCount) { long sum = 0; for (int i = 0; i < longs.size() - 1; i++) { sum += longs.get(i); } System.out.println("请求到达数:" + receiveCount + " 响应时间:" + sum / receiveCount); } } //获取平均时间 public void avgResponTime() { for (int i = 0; i < concurrentCount; i++) { Thread thread = new Thread(this); thread.start(); } } /** * 获取Url响应时间,下载对应url的内容 * * @return */ public void getResponTime() { HttpURLConnection urlConnection = null; InputStream openStream = null; long start = System.currentTimeMillis(); long end = 0; try { URL url = new URL(urlStr); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); openStream = url.openStream(); StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(openStream)); String tmp = null; while ((tmp = reader.readLine()) != null) { builder.append(tmp + "\n"); } end = System.currentTimeMillis(); } catch (Exception e) { e.printStackTrace(); } finally { if (urlConnection != null) { try { urlConnection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } if (openStream != null) { try { openStream.close(); } catch (IOException e) { e.printStackTrace(); } onCallback(end - start); } } } @Override public void run() { for (int i = 0; i < requestCount; i++) { getResponTime(); } } public static void main(String[] args) { PerformancePressureTool performancePressureTool = new PerformancePressureTool("http://www.baidu.com", 10, 10, 95); performancePressureTool.avgResponTime(); }}
划线
评论
复制
发布于: 2020 年 07 月 22 日 阅读数: 37
ruettiger
关注
还未添加个人签名 2018.05.30 加入
还未添加个人简介
评论 (1 条评论)