在对基本Web应用程序进行负载测试时,除了预期的响应时间之外,您还要进行哪些健全性检查?
请求峰值内存使用是否公平?
你做了什么其他检查?
我正在使用The Grinder(在Windows PC上)加载测试网络应用程序,我希望模拟不完美的网络条件,以便了解对应用程序负载有什么影响,特别是我希望看到以下效果:
这样做最简单的方法是什么?
哪个性能测试工具支持使用Kerberos身份验证的网页?刚刚回归到NTLM的工具还不够.
如何在Play中执行负载测试!项目?
你使用外部工具吗?如果是这样,哪一个最好与Play集成?
或者玩!提供了一些关于它的功能?
(我正在使用Eclipse IDE)
编辑:在这个问题已经收到的几个非常慷慨和有帮助的回答中,很明显,当我今天早些时候提出这个问题时,我没有把这个问题的重要部分弄清楚.到目前为止,我收到的答案更多的是关于优化应用程序和消除代码级别的瓶颈.我知道这比尝试从JVM中获得额外的3%或5%更重要!
这个问题假设我们已经完成了在代码级别优化应用程序架构的所有工作.现在我们想要更多,下一个要看的是JVM级别和垃圾收集; 我已相应更改了问题标题.再次感谢!
我们有一个"管道"式后端架构,消息从一个组件传递到下一个组件,每个组件在每个步骤执行不同的过程.
组件存在于Tomcat服务器上部署的WAR文件中.总共有大约20个组件在管道中,存在于5个不同的Tomcat服务器上(我没有选择每个服务器的体系结构或WAR分布).我们使用Apache Camel创建组件之间的所有路径,有效地形成管道的"结缔组织".
我被要求优化运行JVM的每个服务器的GC和一般性能(总共5个).我花了几天时间阅读GC和性能调优,并且很好地处理了每个不同的JVM选项的作用,堆的组织方式以及大多数选项如何影响JVM的整体性能.
我的想法是,优化每个JVM的最佳方法不是将其优化为独立的.我"感觉"(这就是我可以证明这一点!)试图在本地优化每个JVM而不考虑它将如何与其他服务器(上游和下游)上的其他JVM交互,将无法生成全局优化的解决方案.
对我来说,从整体上优化整个管道是有意义的.所以我的第一个问题是:SO是否同意,如果没有,为什么?
为此,我考虑创建一个LoadTester生成输入并将其提供给管道中的第一个端点的方法.这LoadTester可能还有一个单独的" 监视器线程 ",它将检查最后一个端点的吞吐量.然后,我可以进行各种处理,检查消息的平均端到端传播时间,断层前的最大吞吐量等.
它LoadTester会一遍又一遍地生成相同的输入消息模式.此实验中的变量将是传递给每个Tomcat服务器的启动选项的JVM选项.我有一个大约20种不同选项的列表,我想通过JVM,并认为我可以继续调整它们的值,直到我找到接近最佳的性能.
这可能不是绝对最好的方法,但这是我设计的最佳方式,我在这个项目的时间(大约一周).
第二个问题:SO对此设置有何看法?SO如何以不同的方式创建"优化解决方案"?
最后但同样重要的是,我很好奇我可以使用什么样的指标作为衡量和比较的基础.我真的只能想到:
还有其他人?这2个坏的原因是什么?
在回顾了这个剧本之后,我可以看到这可能被视为一个单一的问题,但我真正要问的是如何优化JVM在管道中运行,并随意切割我的解决方案然而你喜欢它.
提前致谢!
我创建了一个准系统ec2 ubuntu服务器,只使用hte安装jmeter跟随..
sudo apt-get install jmeter
Run Code Online (Sandbox Code Playgroud)
该服务器设计为从属服务器.当我运行sudo jmeter-server我得到以下错误.这个错误让我无处可去,因为它是一个简单的ubuntu服务器,据我所知,jmeter apt-get install会安装所有的依赖项.我已经看过这篇文章,但仍然模糊不清以解决这个问题.
JMeter - 在Linux上启动jmeter-server时出现环回地址错误
sudo jmeter-server
[warning] /usr/bin/jmeter: Unable to locate commons-net in /usr/share/java
[warning] /usr/bin/jmeter: Unable to locate geronimo-activation-1.1-spec in /usr/share/java
[warning] /usr/bin/jmeter: Unable to locate geronimo-javamail-1.4-provider in /usr/share/java
[warning] /usr/bin/jmeter: Unable to locate jboss-j2ee in /usr/share/java
[warning] /usr/bin/jmeter: Unable to locate jdom1 in /usr/share/java
[warning] /usr/bin/jmeter: No JAVA_CMD set for run_java, falling back to JAVA_CMD = java
java.lang.Throwable: Could not access /usr/share/jmeter/lib/junit
at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:96)
Created remote object: UnicastServerRef [liveRef: …Run Code Online (Sandbox Code Playgroud) 运行负载测试时会出现不可避免的问题,任何HTTP请求可能会超时或服务器可能返回自定义错误页面.我有一个可爱的jMeter脚本运行而不会发生任何错误,这是在低使用率下发生的事情.
如何修改此脚本,以便在发生错误时脚本重新运行导致错误的请求,直到它没有出现错误为止?例如,我有一个登录请求,如果失败,我不想继续,我想继续尝试,直到登录工作.我也不想再次启动脚本,因为如果页面在登录后失败,我不想再次登录.
我已经看过线程组中的"继续下一个循环",但是我无法找到它实际上做了什么,它是否开始测试?它是否跳转到下一个循环逻辑控制器?我是否必须用循环包围所有请求?
谢谢保罗
我一直在尝试使用Locust.io在EC2计算优化实例上加载测试我的API服务器.它提供了一个易于配置的选项,用于设置连续请求等待时间和并发用户数.理论上,rps = 等待时间 X #_users.但是,在测试时,此规则会针对#_users的极低阈值进行细分(在我的实验中,大约有1200个用户).变量hatch_rate,#_ of_slaves,包括在分布式测试设置中,对rps几乎没有影响.
实验信息
该测试已在具有16个vCPU的C3.4x AWS EC2计算节点(AMI映像)上完成,具有通用SSD和30GB RAM.在测试期间,CPU利用率最高达到60%(取决于孵化率 - 控制产生的并发进程),平均保持在30%以下.
Locust.io
setup:使用pyzmq,并将每个vCPU核心设置为从属.单个POST请求设置,请求体~20个字节,响应体~25个字节.请求失败率:<1%,平均响应时间为6ms.
变量:连续请求设置为450毫秒(最小值:100毫秒和最大值:1000毫秒)之间的时间,填充率为每秒30秒,以及通过改变#_users测量的RPS.

RPS遵循预测的方程,最多可达1000个用户.之后增加#_users的收益递减,大约1200个用户达到上限.#_users这里不是自变量,更改等待时间也会影响RPS.但是,将实验设置更改为32个核心实例(c3.8x实例)或56个核心(在分布式设置中)根本不会影响RPS.
那么真的,控制RPS的方法是什么?我有什么明显的遗失吗?
我计划重用VS Load Test的现有Specflow场景(目前用于验收和自动测试),以避免重复和额外的工作.Specflow适用于那些测试,因为它运行它们一次,但是在Load测试的上下文中,当它执行每个Specflow场景多次并且并行它会遇到问题和错误并且用户数量更多时会得到更多
这些错误可能会导致部分测试失败,最终会产生不正确的测试结果,例如使用一个Specflow场景作为测试场景,负载测试为20个用户,时间段为2分钟,可能导致50个类似于下面的错误.因此测试结果显示特定场景执行200次,其中150次通过,50次失败测试,失败是由Specflow错误引起的.在负载测试的上下文中,由于测试本身存在问题,因此该结果完全错误且不正确.
错误信息:
ScenarioTearDown threw exception. System.NullReferenceException: System.NullReferenceException: Object reference not set to an instance of an object.
TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.HandleBlockSwitch(ScenarioBlock block)
TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.Step(StepDefinitionKeyword stepDefinitionKeyword, String keyword, String text, String multilineTextArg, Table tableArg)
TechTalk.SpecFlow.TestRunner.Then(String text, String multilineTextArg, Table tableArg, String keyword)
Run Code Online (Sandbox Code Playgroud)
经过一些调查后,似乎Specflow无法生成和运行相同的方案并行导致此冲突并且未通过一些测试但我也对此有一些疑问,并试图查看是否有任何解决方法或如果我遗漏任何东西并想知道是否Specflow场景可以用于负载测试吗?
我正在执行以下命令
mysqlslap -uroot -pmypassword --query="show databases;" --delimiter=";" --verbose -P3307 --host=machine01 --create-schema=mysqlslap
Run Code Online (Sandbox Code Playgroud)
但它不断返回此错误
mysqlslap:连接到服务器时出错:1049未知数据库'schema'
注意:我还在我的实例中显式创建了模式mysqlslap.
load-testing ×10
java ×2
jmeter ×2
grinder ×1
jvm ×1
kerberos ×1
locust ×1
mysql ×1
networking ×1
optimization ×1
specflow ×1
sql ×1