gpt4 book ai didi

java - 用java写一个简单的基准测试工具

转载 作者:行者123 更新时间:2023-11-30 07:29:25 25 4
gpt4 key购买 nike

我想用 java 编写一个简单的基准测试工具,它将启动 x 个线程并总共访问一个 url y 次。

它的实际任务部分将向 url 发出 web 请求,并发布 XML 文件。

所以我想做的是,分拆 50 个线程并继续访问 url,直到我发出 10K 个请求。

谁能解释一下如何做到这一点,我相信使用 Executor Service 是可行的方法。

一些需要考虑的事情:

  1. 一旦线程完成,我猜它会立即运行另一个任务,对吗?
  2. 我需要线程返回,因为我必须跟踪成功/失败,它应该存储在哪里(它必须是线程安全的)。

最佳答案

是的,ExecutorService是这项任务的完美选择:

ExecutorService exec = Executors.newFixedThreadPool(50);

开始测量时间并简单地向它提交 10K 任务:

for(int i = 0; i < 10000; ++i) {
exec(new SubmitToUrlTask());
}

考虑使用相同的实例(无状态或线程安全)SubmitToUrlTask而不是在每次迭代中创建新的。

最后你必须等待执行者完成:

exec.shutdown();
if(!exec.awaitTermination(1, TimeUnit.MINUTE)) {
throw new IllegalStateException("Waiting for too long, captain!");
}

现在停止测量时间。 awaitTermination()阻塞直到所有任务完成,但不超过给定时间(示例中为 1 分钟)。

Once a thread is finished, I'm guessing it will immediately run another task correct?

是的,ExecutorService是一堆线程和任务队列。如果线程无事可做,它会从队列中获取第一个任务。

I need the thread to return as I have to keep track of success/failures, where should this be stored (it has to be thread-safe).

您可以使用 Callable<Boolean>Future<Boolean>跟踪结果。此外,如果您仅使用 SubmitToUrlTask 的单个实例, 它可以有两个变量 AtomicInteger类型,跟踪成功和失败。如果您不需要跟踪单个结果,这会简单得多。

话虽如此,您是否考虑过使用 JMeter具有所有这些功能+开箱即用的更多功能?还有 ab 控制台实用程序。

关于java - 用java写一个简单的基准测试工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com