写点什么

week07 作业

用户头像
Safufu
关注
发布于: 2020 年 07 月 22 日

1.性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?



响应时间增加 资源挤压

吞吐量先增加后减少 系统资源从富余到饱和再到过载





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

import com.google.common.collect.MinMaxPriorityQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author yin.jianfeng
* @date 2020/7/22
*/
public class Test {
String url;
int cn;
int frequency;
public Test(String url, int cn, int frequency) {
this.url = url;
this.cn = cn;
this.frequency = frequency;
}
public static Test parseArgs(String[] args) {
String url = args[0];
int cn = Integer.parseInt(args[1]);
int time = Integer.parseInt(args[2]);
return new Test(url, cn, time);
}
static class Statistics {
private MinMaxPriorityQueue<Long> queue;
private long totalTime;
private int frequency;
public Statistics(Test test) {
this.frequency = test.frequency;
queue = MinMaxPriorityQueue.maximumSize(test.frequency * 95 / 100).create();
}
public void print() {
System.out.println("avg:" + totalTime / frequency);
System.out.println("95%:" + queue.peekLast());
}
public void record(long time) {
totalTime += time;
queue.add(time);
}
}
public Statistics doJob(CountDownLatch latch) {
Statistics statistics = new Statistics();
AtomicInteger frequency = new AtomicInteger(this.frequency);
for (int i = 0; i < cn; i++) {
new Thread(
() -> {
if (frequency.decrementAndGet() <= 0) {
latch.countDown();
return;
}
long start = System.currentTimeMillis();
HttpUtils.get(url);
long time = System.currentTimeMillis() - start;
statistics.record(time);
}
).start();
}
return statistics;
}
public void run() {
CountDownLatch latch = new CountDownLatch(cn);
Statistics statistics = doJob(latch);
try {
latch.await();
} catch (Exception e) {
e.printStackTrace();
}
statistics.print();
}
public static void main(String[] args) {
Test.parseArgs(args).run();
}
}



用户头像

Safufu

关注

还未添加个人签名 2018.11.16 加入

还未添加个人简介

评论

发布
暂无评论
week07 作业