首先介紹一下大概情況:在客戶局域網內安裝了一個應用系統(tǒng),是web項目,近期需要需要提供壓力并發(fā)測試報告,要求是:非服務器電腦上測試,單個用戶持續(xù)訪問5分鐘,100用戶并發(fā)訪問5分鐘;結果要求在樣本足夠多(萬為單位)的情況下,異常率小于1%,且平均值大于100(還不懂平均值是啥)。
項目使用JDK+Tomcat+SSH來開發(fā)的,于是使用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: 這是我們可一次建立的最大連接數。那就是新增的連接請求,但還沒有可供使用的連接。由于連接可以使用多線程,在有限的時間之間建立聯(lián)系從而帶來可用連接,但是我們需要通過一些方式確認一些線程并不是立即響應 連接請求的,默認是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
于是就開始了循環(huán)往復的重啟tomcat和數據庫,甚至重啟服務器,仍然是幾條后就報錯,于是就又查了兩個方法,修改服務器注冊表修改TCP和Jmeter運行腳本的連接數和響應時間:鏈接如下:
1) Windows 設置注冊表TCP最大連接數和等待超時配合JMeter并發(fā)壓測:https://blog.csdn.net/boonya/article/details/105700988
2)Jmeter性能測試請求超時:目前遇見有三種情況:http://t.zoukankan.com/tarzen213-p-12056400.html
按照要求修改后,仍然報錯
這時在本地安裝Jmeter測試本地的程序,并發(fā)訪問還算滿足要求,于是想到了服務器的環(huán)境問題,于是將所有的安全防護軟件暫時關閉,這時一切都正常了。
至此,壓力測試也是一種具有破壞性的攻擊測試,于是,做壓力測試時可以先關閉,但是記得及時開啟哦。
浙公網安備 33010602011771號