简单 Web 性能压测工具实现(java)
发布于: 2020 年 12 月 06 日
本程序基于CountDownLatch实现 。
CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行。
网络连接线程
public class ConnectThread implements Runnable {    private CountDownLatch latch;    private String url;    private int connectNums;    public ConnectThread(CountDownLatch latch, String url, int connectNums) {        this.latch = latch;        this.url = url;        this.connectNums = connectNums;    }    public void run() {        for (int i = 0; i < connectNums; i++) {            long startTime = System.currentTimeMillis();            try {                HttpGet httpGet = new HttpGet(url);                CloseableHttpClient client = HttpClients.createDefault();                client.execute(httpGet);                long endTime = System.currentTimeMillis();                Press.queue.add((endTime - startTime));//                System.out.println(i+ ":响应时间:" + (endTime - startTime));            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }        }        latch.countDown();    }}主方法:
public class Press {    private static String url="https://www.baidu.com";    private static int threadNums=10;    private static  int connectNums=10;    public static ConcurrentLinkedQueue<Long> queue = new ConcurrentLinkedQueue();    public static void main(String[] args) {        ExecutorService executor = Executors.newCachedThreadPool();        CountDownLatch latch = new CountDownLatch (threadNums);        for(int i = 0;i<threadNums;i++){            executor.execute(new ConnectThread(latch,url,connectNums));        }        try {            latch.await();            long result = 0;            ArrayList<Long> list = new ArrayList(Press.queue);            for (Long i : list) {                result += i;            }            Collections.sort(list );            System.out.println("avg time is:" + result / list.size());            Double p95 = list.size() * 0.95;            System.out.println("95% time is:" + list.get(p95.intValue()));            executor.shutdown();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}
经测试本开发环境
平均响应时间为:337ms
95% 响应时间为:1784ms

划线
评论
复制
发布于: 2020 年 12 月 06 日阅读数: 13
梧桐
关注
还未添加个人签名 2018.07.06 加入
还未添加个人简介











    
评论