我想为我的网站做1000万用户的负载测试。该站点是一个基于Java的web应用程序。我的方法是为所有链接创建一个Jmeter测试计划,然后为1000万用户生成一份报告。然后使用jvisualVM进行性能分析,并检查是否存在瓶颈。
有没有更好的方法来做到这一点?有没有现成的演示可以做到这一点?我是第一次这样做,所以任何帮助都会非常有帮助。
发布于 2011-05-10 20:54:29
有两种类型的负载测试-瓶颈识别和吞吐量。这个问题让我相信这是关于瓶颈的,所以用户数量是一种转移注意力的问题,相反,目标是在给定的配置中找到可以改进以增加并发性的区域。
应用程序瓶颈通常分为三类:数据库、内存泄漏或算法缓慢。找到它们需要将有问题的应用程序置于压力(即负载)下一段较长的时间-至少一个小时,甚至几天。Jmeter就是用于此目的的一个很好的工具。要考虑的一件事是在启用cookie处理(即Jmeter保留cookie并随后续请求发送)和禁用cookie处理的情况下运行相同的测试-有时您会得到非常不同的结果,这一点很重要,因为后者实际上模拟了一些爬虫程序对您的站点所做的操作。瓶颈检测的详细信息如下:
数据库
没有索引的表或涉及多个joins的SQL语句是常见的应用程序瓶颈。我接触过的每个数据库服务器、MySQL、SQL Server和Oracle都有某种方法来记录或识别运行缓慢的SQL语句。MySQL具有较慢的查询日志,而SQL Server具有跟踪运行速度最慢的SQL的动态管理视图。一旦您掌握了慢语句,使用explain plan查看数据库引擎正在尝试做什么,使用任何建议索引的功能,并考虑其他策略-例如反规范化-如果这两个选项不能解决瓶颈。
内存泄漏
打开详细垃圾收集日志记录和JMX监视端口。然后使用jConsole,它提供了更好的图形,来观察趋势。特别是,泄漏通常表现为填充Old Gen或Perm Gen空间。泄漏是一个瓶颈,JVM花费越来越多的时间尝试垃圾收集,但没有成功,直到抛出OOM错误。
Perm Gen暗示需要增加空间作为JVM的命令行参数。虽然Old Gen意味着泄漏,但您应该停止负载测试,生成堆转储,然后使用Eclipse Memory Analysis工具来识别泄漏。
慢速算法
这就更难追踪了。最常见的问题是同步、进程间通信(例如RMI、web服务)和磁盘I/O。另一个常见问题是使用嵌套循环的代码(查看mom O(n^2)性能!)。
在没有更深层次的知识的情况下,我发现发现这些问题的最好方法是生成堆栈跟踪。这些将告诉所有线程在给定的时间点都在做什么。你要找的是被阻塞的线程或者访问相同代码的几个线程。这通常表明代码库中存在一些缓慢的问题。
https://stackoverflow.com/questions/5645393
复制相似问题