用代码模拟调用接口方式压测现网服务器的服务性能
本文为博主原创,转载请注明出处:
最近为统计现网生产环境的服务处理的性能,需要压测现网服务器,由于现网服务器所处的网络不在同一个局域网内,压测不了,所以想到了使用代码的方式,压测服务器的性能,使用的思路就是将模拟压测的线程数,既但线程持续请求的次数以请求参数的方式传入到指定的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(); } }