Jmeter做性能测试遇到的问题及解决办法

上一篇 / 下一篇  2016-11-04 10:56:00 / 个人分类:jemter

前天客户要求给他提供一份性能测试报告,说:“我们的系统将来的用户数量可以达到800人左右,所以我希望系统能够支持的最大用户并发数可以达到1000” 。⊙﹏⊙b汗

 

我用的测试工具是Jmeter2.2。需要测试的是一个OA系统办公平台。主要遇到的以下几个问题:(jmeter的基本使用网上很多)

 

问题1、系统的所有功能必要要登录以后才能使用,那么使用Jmeter测试时,登录问题如何解决?

我想要测试的是用户登录系统之后,看到的首页。因为这个这个页面的访问量是最大的而且也是最能体现系统速度的。

我想的方法是首先访问登录页面让Jmeter登录,然后并发访问首页。

 

这里加“if控制器”的目的是让第一个线程可以做登录动作。

关于控制器中的条件的写法,帮助文档中说支持JS脚本,但是又有这几个例子:

  • ${COUNT}<10
  • "${VAR}" == "abcd"
  • "${JMeterThread.last_sample_ok}" == "true" (check if last sample succeeded) 
  • 说明用${}来取得系统中的变量(有些变量要通过调用jmeter中的函数来取得);除了数字以外,其他的技术类型都要用字符串的形式如:true要写成"true"。看来和JS脚本还是不一样啊。

    __threadNum是jmeter中的函数,用来取得当前线程的编号,返回的是一个数字。对于jmeter中的函数介绍,可以看这里http://jakarta.apache.org/jmeter/usermanual/functions.html

     

    “HTTP Cookie管理器”在这里的作用是使得同一个线程中的多个请求都是同一个session,就像是从同一个浏览器向服务器发出的请求一样。但是“HTTP Cookie管理器”好像无法使得同一个线程组中的多个线程里的请求都为同一个session。

    当设置线程数为10时,第一个线程的测试结果没有问题,但从第二个线程开始,“首页”都只能返回错误的结果。

    所以这里虽然解决了登录的问题,但是却带来了新的问题:我的目的只是测试“首页”,但现在却不得不连“登录”也一起测试。

    这个问题我最终还是无法解决,如果那位高人知道,请留言说明一下,谢谢。

     

     

    问题2、Java.io.IOException: Error writing to serverjava.NET.SocketException: Connection reset 异常;我测试500个并发时,系统没有问题;可当我把线程数加到800时,就出现错误了,在“查看结果树”中,打开出错的请求,看到如下异常:

    java.io.IOException: Error writing to server
    at sun.reflect.GeneratedConstructorAccessor24.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at sun.Net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.apache.jmeter.protocol.http.sampler.HTTPSampler.readResponse(HTTPSampler.java:222)
    at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:433)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:658)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:647)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:247)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: Error writing to server
    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)
    at java.net.URLConnection.getContentEncoding(Unknown Source)
    at org.apache.jmeter.protocol.http.sampler.HTTPSampler.readResponse(HTTPSampler.java:213)
    ... 5 more

    乍一看我还以为是服务器出了什么问题了,可是到服务器上一看,却没有发现什么异常。于是就还以是不是本机出了什么问题,可能是本机的JVM太晓了,于是修改了/bin/jmeter.bat文件:找到这2行

    set HEAP=-Xms256m -Xmx256m
    set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

    改为:

    set HEAP=-Xms256m -Xmx1024m
    set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

    然后就不在报错了。


    TAG:

     

    评分:0

    我来说两句

    Open Toolbar