工作中的一个老系统,最近变的很慢,开发人员也没找到原因,用的是tomcat5 , 硬件配置还是很强的,8核CPU+8G内存,系统慢的现象是:页面打开的速度还可以,但查询很慢,一到人多时,查询就很慢,最后用jdk6中带的visualVM 工具,观察后,发现用的数据源居然是 Spring 自带的那个用于测试的数据源,这个数据源仅用于自已的开发环境,对于生产环境而,最少得用于dbcp,c3p0,等,后来把它改成了ali 的 durid 后,观察了一天,正常了 。
后来PM要求对系统做个压力测试,一想到LoadRunner 它太大了,我的机器又安装不了,最后看到了apache中的ab测试工具,真是感谢Apache ,后面又找到了一个Apache的JMeter 也是个不错的工具,完全是java开发的。
以下在解讲下 apache2.2中的ab测试,这个很简单,可以去google,有人说测试的不太准,但也可以用来测试看看。
1.tomcat的配置为:
catalina.bat:
set JAVA_OPTS= %JAVA_OPTS% -Xms1024m -Xmx1024m -XX:MaxPermSize=128M
这里也可以加上远程调试和 JMX 监控的脚本,见另一小记。
server.xml
<Connector port="8080" maxHttpHeaderSize="8192" useBodyEncodingForURI="true"
maxThreads="1000" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
进入apache/bin中的目录:
F:\Tomcat\Apache2.2\bin>ab -n 1000 -c 60 http://135.192.10.24:9001/qhcrm/query/a ddressQuery.jsp This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 135.192.10.24 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache-Coyote/1.1 Server Hostname: 135.192.10.24 Server Port: 9001 Document Path: /qhcrm/query/addressQuery.jsp Document Length: 695 bytes Concurrency Level: 60 Time taken for tests: 2.078 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 927000 bytes HTML transferred: 695000 bytes Requests per second: 481.20 [#/sec] (mean) Time per request: 124.688 [ms] (mean) Time per request: 2.078 [ms] (mean, across all concurrent requests) Transfer rate: 435.62 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 5.2 0 16 Processing: 0 118 19.7 125 156 Waiting: 0 67 35.8 63 156 Total: 0 120 19.6 125 156 Percentage of the requests served within a certain time (ms) 50% 125 66% 125 75% 125 80% 125 90% 141 95% 141 98% 156 99% 156 100% 156 (longest request)
可以直接用ab 查看它里面有很多参数,现就主要两个:-n 总的请求数, -c 并发数,后面再加上请求的页面地址。
因我的tomcat 5上的 server.xml不是如上所设,在70并发时会有错误,
F:\Tomcat\Apache2.2\bin>ab -n 1000 -c 70 http://135.192.10.24:9001/qhcrm/query/a
ddressQuery.jsp
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 135.192.10.24 (be patient)
apr_poll: 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。 (730055)
不知是怎么原因,准备把参数调大,再来测试。
2. 关于JMeter ,它是Java开发的,首先从apache上下载 apache-jmeter-2.8.gz
这是一个分布式的,在你的服务器上,也是tomcat所有的机器上也有copy 一份。
1. 直接解压,运行
apache-jmeter-2.8\bin 下的 jmeter-server.bat linux 下中 jmeter-server.sh , 如果显示有1099端口的冲突,就要改 jmeter.properties 中的
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1098 ------------- 把下面注掉的打开改为 1098 或别的端口
#server_port=1099
2, 在你本机放一个相同版本的jmeter, 最好每个机器上的jmeter都是一样的,
修改 jmeter.properties中的
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1:1098 --- 找到以下注掉的,打开,改为 远程机的IP:端口号,这里可以配多个,用,隔开,即可,在下面的客户端中会看到可以测试多个远程机上的系统。
#remote_hosts=localhost:1099,localhost:2010
Jmeter 是通过RMI 来远程连接的。
3. 启动后,就打开发客户端:
如果,配了多个,在运行那里会显示出多个出来。
4. 在测试计划中新建一个 线程组:
5.
在这个界面上,配置测试系统的IP :Port, 页面PAth:
6.
再右键加入监听器,里面有很多种,可以都加上来看看,
这样,就可以启动了,在上面Tool bar中有一个启动的图标,点一下它就会运行,就可以在监听器中查看所有的结果。
,它还可以测JDBC,WebService 等 ,功能很强大,需要的话,参考官方文档,在些只做入门。
对了,新建的线程组,还要对它另存为,保存为一个 .jmx 的文件,下次还可以打开再看。