1

这更多是设计问题;您将如何在 java 中设计一个 http 负载生成器,您可以为其指定并发用户数、运行测试的时间量以及要命中的 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 秒打印一次统计信息,我将使用一个定时器任务来唤醒、显示统计信息并返回睡眠状态。这里的主要问题是,如何有效地调度计时器任务,因为有很多线程在尝试更新统计信息的状态,而该线程正在尝试打印它。与其他线程相比,我可以提高该线程的优先级,以便在执行时获得优先权。

4

2 回答 2

0

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

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

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

于 2012-11-21T18:23:38.553 回答
0

查看Apache JMeterAgrate Report提供您想要的统计信息。

于 2012-11-21T18:31:46.313 回答