java - 压测服务端点,使用x个线程发送100K请求

标签 java multithreading concurrency threadpool

我想对我的服务端点进行压力测试,发出 http POST 请求。

我希望解决方案能够:

  1. 发出一定数量的请求,例如 100K
  2. 继续运行 x 分钟

到目前为止,我使用如下执行器服务创建了我的解决方案:

int MAX_THREADS = 20;
int MAX_REQUESTS = 1000;

ExecutorService es = Executors.newFixedThreadPool(MAX_THREADS);

for(int x = 0; x < MAX_REQUESTS; x++) {
  es.execute(new MyTask());
}

es.shutdown();

try {
  es.awaitTermination(..);
}
catch(...) {

}

其中 MyTask 实现了 Runnable,并使用 HttpClient (apache) 生成 HttpPost。

因此,这会创建一组线程池,然后调用该任务 x 次。

如何修改它才能运行指定的分钟数?

为了获得开始/结束时间统计信息,我将不得不使用 futures,以便每个线程并返回正确运行需要多长时间?

此外,在我的可运行任务中,我正在创建 HttpClient 对象的新实例,并加载随帖子发送的文件。我猜这会减慢我的基准测试,有没有办法在除了实际调用发出请求之外的所有设置中重新使用 httpclient?

在有人提到它之前,我知道已经有像 jmeter 等工具可以做到这一点,但我想了解它是如何工作的,并且稍后我将做一些我想要完全控制的自定义事情。

最佳答案

如果您可以使用 Apache JMeter,为什么还要自己制作呢?您可以制作一个简单的插件来满足您的应用程序需求,然后让 JMeter 的所有负载生成功能触手可及。包括间歇跑等等。

关于java - 压测服务端点,使用x个线程发送100K请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757095/

相关文章:

java - 我们如何从strope连接中提取rid和sid的值

java - 将二维int数组按照arr[i]的和从低到高排序

java - 对整数数组进行排序,同时保持与字符串数组的关系

multithreading - 在多核 x86 上,是否需要将 LOCK 作为 XCHG 的前缀?

Python 多线程性能 - 使用 C++ 代替?

java - Swing-GUI 不知道在构造函数中实例化的外部类

JVM 关闭前 Java 轮询器线程清理

c++ - 使用互斥锁作为信号量?

java - 从不可修改的映射中并发读取

java - Display.syncExec 不在 Callable 内部工作