• web项目压力并发测试遇到的问题,Jmeter,java,proxool,oracle,安全防护软件


    首先介绍一下大概情况:在客户局域网内安装了一个应用系统,是web项目,近期需要需要提供压力并发测试报告,要求是:非服务器电脑上测试,单个用户持续访问5分钟,100用户并发访问5分钟;结果要求在样本足够多(万为单位)的情况下,异常率小于1%,且平均值大于100(还不懂平均值是啥)。

    项目使用JDK+Tomcat+SSH来开发的,于是使用Apache Jmeter进行测试,遇到以下几个问题:

    1、服务器日志报错:Caused by: java.sql.SQLException: We are already in the process of making 11 connections and the number of simultaneous builds has been throttled to 10

      百度:https://www.matools.com/blog/190118426 

      simultaneous-build-throttle:  这是我们可一次建立的最大连接数。那就是新增的连接请求,但还没有可供使用的连接。由于连接可以使用多线程,在有限的时间之间建立联系从而带来可用连接,但是我们需要通过一些方式确认一些线程并不是立即响应 连接请求的,默认是10。

      解决方案:

      在proxool.xml中增加: 

      <simultaneous-build-throttle>20</simultaneous-build-throttle> 

      默认 

      <simultaneous-build-throttle>10</simultaneous-build-throttle>

       本项目是在applicationContext-Hibernation.xml中配置的数据库连接,具体参数是:(调到20后又报错,最后调到了50)

     <!-- 可一次建立的最大连接数(默认10个) -->
     <property name="simultaneousBuildThrottle" >
         <value>50</value>
     </property>

     2、报错:日志报错信息:2022-04-26 14:09:52,035 ERROR JDBCExceptionReporter:234 - Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186647040)(ERR=12518)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4)))),

    并且在连数据库连不上:

    百度:网上有的说是连接数据库的SID不对,但是本项目是正常访问一会让后报错,于是pass调

       还有的说是数据库连接数的问题:https://blog.csdn.net/qq_41871076/article/details/115206306

    解决方案:断开其中一个数据库连接,修改Oracle数据库的连接数:   

        cmd进入数据库:
        sqlplus sys/密码@IP/实例名 as sysdba

        查看processes值:
        Show parameter processes;
        Select count(*) from v$process;

        修改语句如下:
        分别输入:
        alter system set processes=1000 scope=spfile;
        alter system set sessions=1105 scope=spfile;

        

    3、xml中数据库最大连接数:Thread Max 55,但已超过55,于是修改配置文件:从55改为1000,按需修改。

    <bean id="dataSource"
            class="org.logicalcobwebs.proxool.ProxoolDataSource">
            <property name="driver">
                <value>oracle.jdbc.driver.OracleDriver</value> 
            </property>
            <property name="driverUrl">
                    <value>jdbc:oracle:username/pasword@ip:1521:orcl</value> --orcl即上面说的SID
            </property>
            <property name="user">
                <value>username</value>
            </property>
            <property name="password">
                <value>password</value>
            </property>
            <property name="alias">   
                <value>temp</value>   
            </property>
     
            <!-- 最少保持的空闲连接数 (默认5个)-->
            <property name="prototypeCount">
                <value>5</value>
            </property>
     
            <!-- 最大连接数 (默认15个)-->
            <property name="maximumConnectionCount">
                <value>1000</value>
            </property>
     
            <!-- 最小连接数 (默认5个) -->
            <property name="minimumConnectionCount">
                <value>5</value>
            </property>
            
             <!-- 可一次建立的最大连接数(默认10个) -->
            <property name="simultaneousBuildThrottle" >
                 <value>50</value>
            </property>
        </bean>

    4、最后一个问题也是困扰最久,耗时最长的一个问题:Jmeter做测试,脚本里报告报错,访问数量在1~200条不等后,就报错:

    Response message: Non HTTP response message: connect timed out

    于是就开始了循环往复的重启tomcat和数据库,甚至重启服务器,仍然是几条后就报错,于是就又查了两个方法,修改服务器注册表修改TCP和Jmeter运行脚本的连接数和响应时间:链接如下:

      1) Windows 设置注册表TCP最大连接数和等待超时配合JMeter并发压测:https://blog.csdn.net/boonya/article/details/105700988

      2)Jmeter性能测试请求超时:目前遇见有三种情况:http://t.zoukankan.com/tarzen213-p-12056400.html

    按照要求修改后,仍然报错

    这时在本地安装Jmeter测试本地的程序,并发访问还算满足要求,于是想到了服务器的环境问题,于是将所有的安全防护软件暂时关闭,这时一切都正常了。

    至此,压力测试也是一种具有破坏性的攻击测试,于是,做压力测试时可以先关闭,但是记得及时开启哦。

  • 相关阅读:
    linux centos 8 为.net core 添加进程守护 Supervisor
    vue-quill-editor安装及使用:自定义工具栏和自定义中文字体,把字体写在html的style中
    nginx参数
    k8s pod 挂载glusterfs报错
    Vue跨域问题解决
    CSS导航菜单(二级菜单)
    CSS导航菜单(一级菜单)
    微信小程序开发正常,真机预览模式错误
    uniapp获取用户OpenId及用户详情
    uniapp 获取用户手机号
  • 原文地址:https://www.cnblogs.com/wmxblog/p/16204245.html
Copyright © 2020-2023  润新知