如何使用jmeter和visualVM进行负载测试?

| 我想为我的网站的1000万用户进行负载测试。该站点是一个基于Java的网络应用程序。我的方法是为所有链接创建Jmeter测试计划,然后为1000万用户生成报告。然后使用jvisualVM进行性能分析,并检查是否存在瓶颈。 有什么更好的方法吗?是否有任何现有的演示程序可以执行此操作?我是第一次这样做,因此任何帮助都会非常有帮助。     
已邀请:
您走在正确的道路上,但是您的负载限制很高。 为什么我要说这是因为您的站点可能需要更多计算机来处理10Milj并发用户。一个进程可能很难处理并发的32K TCP流。还要对实际处理10Milj用户所需的带宽进行一些数学计算。 现在,我不知道您打算在站点上提供什么样的服务,但是当考虑到JVisualVM将处理速度降低了10倍(或者方法跟踪的速度提高了10倍)时,您实际上将无法衡量“真实世界”如果让JMeter和JVisualVM同时工作。 当您在较低负载下运行时,JVisualVM更有用。 首先要进行良好的测量,请确保您的基线良好。 对10个并发用户进行测试,连接JVisuamVM并使其运行一段时间,而不是降低所有有趣的值。 有了基准之后,就可以开始增加更多的负载。 添加10倍的负载(例如:100个用户),查看JVisualVM中的更改。继续执行此操作,直到JVisualVM明显降低了您的速度,每次增加额外的负载时,请确保已写下您感兴趣的数字。在图中绘制数字。 现在...(手动)为所需的用户数插入图形。这适用于内存使用,磁盘访问等,但不适用于已用的CPU时间,因为JVisualVM会占用CPU并为其提供无效数字(特别是如果您打开了方法跟踪)。 如果您真的想拥有多达10Milj的用户,我也不相信JMeter,我会编写一个自己的小测试程序来执行您想要的测试。这很不错,因为设置用于处理10Milj的站点也将花费一些时间,因此花一些额外的时间来使用测试工具并不是浪费。     
仅仅因为您的数据库中有1000万用户,并不意味着您需要使用那么多用户进行负载测试。想想看-您的网站真的有1000万同时用户吗?对于网络应用程序,注册用户的比例通常为1:100,也就是说,您在任何时候都不太可能拥有超过100K的用户。 JMeter可以处理这种负载吗?我对此表示怀疑。请改用faban。它非常轻巧,可以在单个VM上支持数千个用户。您在创建工作负载时也具有更大的灵活性,并且还可以自动监视整个测试基础结构。 现在到分析部分。您没有说您正在使用什么服务器。任何Java应用服务器都将提供足够的监视支持。商业服务器提供了不错的GUI工具,而Tomcat通过JMX提供了广泛的监视。您可能需要从这里开始,然后再进入JVM级别。 对于JVM,您确实不希望在运行如此大的性能测试时使用VisualVM。除了支持这样的负载,我还假设您正在使用多个appserver / JVM实例。主要的性能问题通常是GC,因此请使用JVM选项来收集和记录GC信息。您将不得不对数据进行后处理。 这是一项重要的练习-祝您好运!     
负载测试有两种类型-瓶颈识别和吞吐量。这个问题使我相信这是关于瓶颈的,因此用户数量有点让人头疼,相反,目标是针对给定的配置查找可以改进以提高并发性的区域。 应用程序瓶颈通常分为三类:数据库,内存泄漏或慢速算法。找到它们会涉及使问题应用程序承受压力(即负载)更长的时间-至少一个小时,甚至长达几天。 Jmeter是用于此目的的好工具。要考虑的事情之一是在启用Cookie处理的情况下运行相同的测试(即Jmeter保留cookie并发送每个后续请求)并禁用-有时您会得到截然不同的结果,这很重要,因为后者实际上是对某些内容的模拟抓取工具会访问您的网站。瓶颈检测的详细信息如下: 数据库 没有索引或涉及多个联接的SQL语句的表是常见的应用瓶颈。我处理过的每个数据库服务器,MySQL,SQL Server和Oracle都有某种记录或识别运行缓慢的SQL语句的方法。 MySQL的查询日志很慢,而SQL Server的动态管理视图可以跟踪运行最慢的SQL。一旦掌握了慢速语句,请使用解释计划来查看数据库引擎正在尝试做什么,使用建议索引的任何功能,并考虑其他策略(例如反规范化)(如果这两个选项不能解决问题)瓶颈。 内存泄漏 打开详细的垃圾收集日志记录和JMX监视端口。然后使用jConsole(可提供更好的图形)来观察趋势。特别是,泄漏通常表现为充满了老一代或彼尔姆一代的空间。泄漏是瓶颈,JVM会花费更多的时间尝试不成功地进行垃圾收集,直到引发OOM错误为止。 Perm Gen表示需要增加空间作为JVM的命令行参数。 Old Gen意味着泄漏,您应该停止负载测试,生成堆转储,然后使用Eclipse Memory Analysis Tool识别泄漏。 慢速算法 这更难追踪。最常见的违规者是同步,进程间通信(例如RMI,Web服务)和磁盘I / O。另一个常见的问题是使用嵌套循环的代码(看看妈妈的O(n ^ 2)性能!)。 我发现最好的方法是在缺少一些更深入的知识的情况下生成堆栈跟踪。这些将告诉所有线程在给定的时间点正在做什么。您正在寻找的是BLOCKED线程或几个都在访问同一代码的线程。这通常指出了代码库中的一些缓慢之处。     
我写了博客,继续进行性能测试: 确保服务器(硬件可以按照暂存/生产要求进行安装)没有其他会影响性能的安装。 为了在DB中设置用户,可以使用一个过程并将其称为jmeter测试计划的一部分。 将jmeter安装在单独的计算机上,以使jmeter不会影响性能。 在jmeter中为所有uri创建一个测试计划(如图1所示),并带有响应检查和基于计时器的请求。 使用jmeter获得初始基准。 检查是否存在性能低下的uri。这些是瓶颈的期望点。 尝试使用其他选项来提高性能,但一次只关注一个瓶颈。 尝试执行第6步中的任何一项修复,然后进行基准测试。如果有任何改进,请提交更改,然后从步骤5开始重复。否则,请还原并尝试步骤6中的其他任何选项。 下一步将是使用负载平衡,硬件扩展,群集等。这可能包括一些物理设置和硬件/软件成本。使用可伸缩性选项给出结果。 有关详细说明,请访问:http://www.daemonthread.com/2011/06/site-performance-tuning-using-jmeter.html     
我开始使用JMeter插件。 这使我可以收集JMX上可用的应用程序指标,以用于我的负载测试。     

要回复问题请先登录注册