用代码模拟调用接口方式压测现网服务器的服务性能

本文为博主原创,转载请注明出处:

  最近为统计现网生产环境的服务处理的性能,需要压测现网服务器,由于现网服务器所处的网络不在同一个局域网内,压测不了,所以想到了使用代码的方式,压测服务器的性能,使用的思路就是将模拟压测的线程数,既但线程持续请求的次数以请求参数的方式传入到指定的controller 中,然后再对应的方法中创建线程池,不断的执行任务,同时每隔指定的时间,通过打印日志的方式,观察服务处理的次数。

  提供示例思路代码如下:

  1.创建线程类,并执行指定的任务

import java.util.concurrent.atomic.AtomicInteger;

public class ThreadEntity implements Runnable{

    public static AtomicInteger count = new AtomicInteger(0);
    // 每个线程执行的任务数
    private int eachThreadTaskCount;

    public ThreadEntity(){}

    public ThreadEntity(int eachThreadTaskCount){
        this.eachThreadTaskCount = eachThreadTaskCount;
    }

    @Override
    public void run() {
        for (int i=0;i<eachThreadTaskCount;i++){
            count.incrementAndGet();
            System.out.println("执行加一" + count.get());
            // do yourself to mock test
        }
    }
}

  

  2. 模拟批量压测:

  

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MockThreadTest {

    public static void main(String[] args) {
        test(10);
    }

    public static void test(int threadNum) {
        ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
        for (int i = 0; i < threadNum; i++) {
            executorService.execute(new ThreadEntity(100));
        }
        long startTimestamp = System.currentTimeMillis();
        boolean isEnding = true;
        while (isEnding) {
            if (ThreadEntity.count.get() == 1000) {
                isEnding = false;
            }
            // 统计计算的次数和时间
            System.out.println("请求次数为" + ThreadEntity.count.get());
            System.out.println("请求的总时间为" + (System.currentTimeMillis() - startTimestamp));
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        executorService.shutdown();
    }
}

 

posted @ 2021-12-06 23:44  香吧香  阅读(183)  评论(0编辑  收藏  举报