java中的http load生成器

时间:2012-11-21 18:15:13

标签: java multithreading concurrency

这更多是设计问题;您将如何在java中设计一个http load生成器,您可以为其指定并发用户数,运行测试的时间以及要命中的URL列表。

some_load_generator -users n1 -time n2 -urls some_file_name.txt

程序启动,创建用户数指定的线程数,每个线程从url文件中读取一个随机url并发出GET请求。对于每个请求,每个线程记录完成整个GET请求所花费的时间。该程序每隔5秒打印出所有线程到目前为止所做的所有请求的最小,最大和平均时间。

您将如何创建线程,存储最小,最大和平均信息,并每5秒打印一次信息。

这是我到目前为止所想的:

  1. 程序将创建一个新的固定线程池执行程序,它对应于用户数。这需要线程生命周期管理。

  2. Runnable实现从文件中读取一行发出GET请求并记录所花费的时间。

  3. 我的主要问题是如何有效地计算所有线程的最小值,最大值和平均值,因为我们需要同步访问这些变量。

  4. 为了每隔5秒打印一次统计信息,我将使用一个唤醒的计时器任务,显示统计信息并重新进入休眠状态。这里的主要问题是,如何有效地调度计时器任务,因为当该线程试图打印时,有很多线程试图更新统计信息的状态。可能是我可以将此线程的优先级与其他线程相比增加,以便在执行时获得优先权。

2 个答案:

答案 0 :(得分:0)

您的线程如何将此数据发送到某种聚合器,然后您的统计打印机只是从这里提取数据?

这样,在每个线程完成之前,它们会更新聚合器中所需的指标,并且统计打印机不会需要干扰正在运行的线程吗?

有点像远程日志记录。因此,每个线程都会执行它需要做的事情,并且在完成之前将时间发送到聚合器,然后打印机每隔N秒打印一次数据,但是从聚合器获取数据,而不是线程本身(类似于如果你愿意,可以像缓冲区一样。)

答案 1 :(得分:0)

结帐Apache JMeterAggerate Report为您提供所需的统计信息。