[我在JMeter
中制定了简单的测试计划:一个线程,其空http request
至localhost
,其中在运行测试时没有Web服务器处于活动状态。我从命令行运行测试。
[我注意到,在http connection timeout
中设置的HTTP sampler
对tps
上的MacOS
具有重大影响:100 TPS,连接超时为10毫秒,500 TPS,连接超时为1毫秒(Apache Web服务器工作时为2500 TPS)。
然而,在CentOS服务器上没有本地主机的Web服务器上(测试期间错误率100%),无论超时值如何,tps均为2500。这是为什么?可以是某些jvm
参数吗?
MacOS:
java 13 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)
CentOS:
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
添加:
以下有关我尝试过的立即错误的提示:卷曲http://localhost并在服务器和MacOS上立即获得curl: (7) Failed to connect to localhost port 80: Connection refused
。为什么然后JMeter仅在MacOS上等待超时?还有其他需要检查/尝试的地方吗?
[可能是在一个IP address(alias)上启动Apache并且JMeter试图连接到另一个IP地址的情况。
再次检查您是否在Apache Web服务器和JMeter中使用了相同的IP,并且应该获得相同的结果。
Apache bind configuration:
Listen 127.0.0.1:80
JMeter HTTP Request Sampler配置:
[如果必须使用主机名,请确保将其解析为正确的IP地址,例如,Apache Web服务器可能正在侦听IPv4 address,而Java正在尝试使用IPv6 endpoint。如果是这种情况,您可以通过将下一行添加到system.properties file
中来强制Java使用IPv4堆栈。java.net.preferIPv4Stack=true
您还可以在DNS Cache Manager中设置主机名/ IP地址自定义解析规则
更多信息:Java Networking Properties
最后但并非最不重要的一点是,不建议将系统进行测试,并且将负载生成器与JMeter放在同一台机器上运行会占用大量资源,并且两个应用程序可能都开始为OS资源(CPU,RAM,网络,磁盘等),由于两个应用程序之间的相互干扰,要想将性能瓶颈降到最低将非常困难。