最近,部门的一个关于基础数据和权限控制的项目已近尾声,可由于性能的问题,一直没有做好正式上线运行的准备,由此,引发了一些我对压力测试的认识。
MI 的LoadRunner8.0是一个工业级负载测试标准工具,用它进行压力测试,可以节约公司的人力,财力, 它本身可以模拟成千上万个用户并发访问系统,给系统一定的压力,模拟实际的生产环境,并且根据测试结果,它可以帮助我们分析系统的瓶颈,提供我们应用系统的性能。它分三个部分,首先要录制脚本,并在此基础上进行一些编辑(例如设置集合点,事务,参数化数据等),然后把这个脚本放到一个特定的场景里去执行,执行前可以进行一些运行期的设置,运行过程中可以监控系统的一些反映参数,最后通过它的分析工具来分析测试结果,给我们的应用系统提供一些性能方面的合理化建议。
压力测试做完之后,虽然知道了问题,但是问题的方向是比较模糊的,为此,可以借助Quest公司的JProbe Suite性能测试工具进行内存,代码覆盖,方法调用时间方面的分析,查出具体的问题,进行修改发布之后,再利用LoadRunner进行反复测试,看性能是否优化了。
在压力测试的过程中,应用服务器和数据库的一些参数调优也是非常重要的,针对应用服务器,比较重要的参数有jvm占用堆大小,线程池的大小,连接池的大小,prepareStatement Cache条数大小;针对数据库,表空间,索引,事务级别,锁大小,临时表这些参数也对系统应用有重要的影响。同时,在java应用里,sql优化,数据库连接的管理,缓存的使用,查询分页,防内存泄露的代码的使用会直接对应用系统造成巨大的性能影响。
跟踪应用服务器里jvm垃圾回收的频率和所消耗时间的时候,可以加 -Xverbosegc参数来打印垃圾回收的详细信息。分析gc日志的工具有GCAnalyze 和HeapRoot 。