写点什么

架构训练营第七周作业

用户头像
张锐
关注
发布于: 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
回复
没有更多了
架构训练营第七周作业