Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 负载测试-需要运行模拟100K用户的测试_Java_Junit_Load - Fatal编程技术网

Java 负载测试-需要运行模拟100K用户的测试

Java 负载测试-需要运行模拟100K用户的测试,java,junit,load,Java,Junit,Load,我们需要对服务器进行负载测试,我们的目标是模拟100K并发用户。 我创建了一个junit脚本,它接收NUM_OF_USERS参数,并针对我们的服务器运行该脚本 问题是我们需要大量的用户(100K),而运行此测试的一台pc可能只能运行1000个用户 我们如何完成这项任务?有什么工具吗 另外,如果我们可以在多台PC上运行junit测试,而不使用需要配置相关参数的工具,那将非常好。。(我们花了大量时间创建此脚本,希望避免转换到其他工具)您可以理解,打开100K个线程是不可能的。但是,您并不真正需要10

我们需要对服务器进行负载测试,我们的目标是模拟100K并发用户。 我创建了一个junit脚本,它接收NUM_OF_USERS参数,并针对我们的服务器运行该脚本

问题是我们需要大量的用户(100K),而运行此测试的一台pc可能只能运行1000个用户

我们如何完成这项任务?有什么工具吗


另外,如果我们可以在多台PC上运行junit测试,而不使用需要配置相关参数的工具,那将非常好。。(我们花了大量时间创建此脚本,希望避免转换到其他工具)

您可以理解,打开100K个线程是不可能的。但是,您并不真正需要100K线程。人类用户的行为相对较慢。每10秒或类似的时间执行最大动作

因此,您可以创建大约100个线程,但每个线程都应该模拟1000个用户。如何模拟?您可以保存1000个表示用户状态的对象,按顺序或随机进入列表,执行下一个用户的操作并执行它

您可以自己实现,也可以使用Actors模型框架,例如


如果您现在不想使用Akka,您可以使用JMeter改进第一个解决方案。您可以将plugin实现到JMeter,在这里您可以使用在一个线程中模拟多个用户的相同逻辑,但是线程池将由我的JMeter管理。作为一项优势,您将获得报告、时间度量和可配置负载

您不需要模拟10万用户,就可以大致了解10万用户的性能。由于您的模拟不会完全模拟真实用户,您已经接受了一些不准确的信息,所以为什么不进一步呢

您可以使用100、300和1000个模拟用户(您说您的计算机将管理这些用户)来衡量性能,并观察趋势。也就是说,您可以创建一个性能模型,并使用该模型通过外推来估计性能。计算成本(例如,在CPU时间或内存中)可近似为幂律:

C=C0 N^p


其中C是成本,C0是未知成本常数,N是问题大小(对于您的情况,用户数),p是未知数(可能在0到2的范围内)。

您的方法是有问题的,因为我的测试是创建用户正在执行的rest调用,现在的问题是,像这样的每个调用都被阻塞了(使用restTemplate),因此不是真正的并发性。在rest调用中使用这种方法是可以的。rest调用需要多长时间?0.1秒?0.5秒?一个用户每分钟点击多少次?5?10?让我们以最小-最大情况为例:用户每分钟点击10次,每次点击需要0.5秒。因此,您在IO上被阻止,每分钟5秒,因此一个线程可以模拟12个用户。但是这是最糟糕的情况。如果用户执行5次单击,每次单击需要0.1秒,那么每个线程可以模拟120个用户,因此您需要大约800个线程。顺便说一句,JMetter可以帮助您分发调用。我的另一个建议-Akka使用NIO,因此一个线程可以为许多用户服务。raedwald-是否有关于该方法的更详细信息的链接西敏?谢谢!