架构训练营第七周作业

用户头像
张锐
关注
发布于: 2020 年 07 月 21 日



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



public static void main(String args[]) throws Exception {
int concurrencyLevel = 10;
int totalCount = 100;
ExecutorService threadPool = Executors.newFixedThreadPool(concurrencyLevel);
Future<Long>[] futures = new Future[totalCount];
Long[] costs = new Long[totalCount];
for (int i = 0; i < totalCount; i++) {
Future<Long> future = threadPool.submit(new Callable<Long>() {
@Override
public Long call() throws Exception {
try {
long start = new Date().getTime();
URL url = new URL("https://www.baidu.com");
URLConnection connection = url.openConnection();
Object content = connection.getContent();
long end = new Date().getTime();
return end - start;
} catch (Exception e) {
e.printStackTrace();
}
return 0l;
}
});
futures[i] = future;
}
for (int i = 0; i < totalCount; i++) {
costs[i] = futures[i].get();
}
System.out.println("avg cost is: " + getAvgTime(costs) + "ms");
Collections.sort(Arrays.asList(costs));
System.out.println("95 cost is: " + costs[94] + "ms");
}
private static double getAvgTime(Long[] costs) {
long total = 0;
for (int i = 0; i < costs.length; i++) {
total += costs[i];
}
return total / costs.length;
}

用一个固定大小的线程池(本例申请10个),然后总共100个请求往线程池里面扔,10个线程很快被打满,其他请求排队,模拟10个并发的情况。

执行结果如下:



用户头像

张锐

关注

还未添加个人签名 2018.08.07 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签
2020 年 07 月 21 日 10:50
回复
没有更多了
架构训练营第七周作业