“让你的web应用程序完成你想做的事情是一回事,而让他们快速、有效的去做常常是另外一回事。”
在这篇文章里我将初步讨论有关“web应用程序的性能”的问题,主要是一些基本概念以及工具,算是抛砖引玉吧!注意这些内容同样适用于j2ee应用。此后,也许我会写更多关于此方面的文章。
首先,这里有两个性能方面的重要指标。请注意,下面的“定义”并不规范,仅供参考。
* response time - 响应时间
从初始化请求到完成响应所用的时间。这是一个测试web应用程序速度的重要度量。
* scalability - 伸缩性
一个可伸缩的应用程序的响应时间随负载的增加而线性增加。
没有web应用程序可以处理无限数目的请求,但是一般我们可以预测一个范围,并保证我们的web应用程序可以在此范围内“优雅”的伸缩,即始终把响应时间维持在可接受的级别。
如果我们打算优化我们的web应用程序,那么至少我们应该知道它到底该不该优化。压力测试可以解答这个问题。
* load test - 压力测试
为web应用程序模拟用户请求以测量其伸缩性的过程。它非常有用,虽然开始的时候会觉得有点“变态”。一般我们会模拟大量的用户请求以获得在web应用程序的速度恶化到无法接受的级别前能够处理的并发请求数量。
所谓“无法接受的级别”并不是一定要到实例池崩溃、应用服务器瘫痪甚至服务器当机的时候,这要视需求而定。
一般压力测试包含如下步骤:
* 确定接受请求并完成响应的最大允许的延时。
* 估计web应用程序的最大并发用户数量。
* 模拟用户请求,以一个比较小的负载开始,逐渐增加模拟用户的数量,直到web应用程序的 相应延时超过最大延时。
* 如果负载比估计的用户数量小,那么应该优化这个web程序,否则你选择性的执行优化。
你不会在考虑自己写一个测试程序吧?算了,何必再重新发明一次轮子?这里有一些压力测试工具,它们各有特色,先介绍免费的:
* web application stress tool, microsoft, http://www.microsoft.com
* jmeter, java apache project, http://www.apache.org/
* loaditup, broadgun software, http://www.broadgun.com
如果你或你的公司很有money,或者需要更加丰富的功能,可以使用以下商业软件,不过它们都价值$10,000,甚至更多:
* webload, radview software, http://www.radview.com/
* silkperformer, segue software, http://www.segue.com/
* benchmark factory, quest software, http://www.benchmarkfactory.com/
* loadrunner, mercury interactive, http://www.mercuryinteractive.com/
无论你选择哪种工具,它都至少应该提供以下的功能,以便为以提供丰富且有意义的测试数据:
* 发送get和post请求
* “记录”从浏览器发送的get和post请求(以免开发者需要手写这些合适的请求)。
* 获取和发送cookie。
* 多线程
* 模拟用户延迟
* 记录性能数据
* 控制带宽
我打赌如果你以前没有接触过以上这些内容,那么你的web应用程序很难在压力测试中获得令人满意的结果。你会看到响应时间会随着请求数量的增多而暴涨,甚至出现一些我们不想看到的情况,比如“拒绝连接”。
一旦没能通过压力测试我们应该如何应对呢?优化!没错,不过我们怎么知道那里应该优化呢?profiler可以对此提供很多的帮助。(我不知道怎么翻译它更贴切一些,所以干脆不翻译了!)
profiler提供这样的功能,它可以检测你的应用程序并提供一些有用的运行时信息,比如某块代码的执行时间、内存/堆的使用情况、内存中的对象实例数量等等。比如,我们想知道到底是哪个java对象的哪个方法耗费了更多的时间。
以下是一些profiler:
* quantify,rational software,http://www.rational.com/
* optimizeit,intuitive systems,http://www.optimizeit.com/
* jprobe,sitraka software,http://www.jprobe.com/
请注意,我们不能过分依赖工具,虽然它们很多时候可以极大的是我们的工作变得简单、轻松。一般如果你知道了系统的瓶颈所在,修改往往是一件相对轻松的事情。个人认为寻找、发现系统的瓶颈所在才是最关键、也是最体现一个人功力的步骤。这是一个非常专业的问题,它需要你对所使用的应用平台、软件架构、数据库系统、网络环境等等诸多方面非常深的造诣。这并不夸张,任何一个会jsp和jdbc的人都可以写出一个web应用程序来,但是那还相差太远……限于篇幅,话题先进行到这里。其实你可以在很多地方找到有关测试和优化技巧的文章,都非常有针对性,比如theserverside.com、javalobby.com等。java之路很长,一步一步走吧!!
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器