天天看點

linux中使用jmeter壓力測試及性能調優

作者:散文随風想

1.上傳jmx格式的腳本,

修改權限 chmod 777 XX.jmx

2.執行腳本

jmeter -n -t denglu200.jmx -l denglu200.jtl                

-n代表nogui 格式

-t 代表執行的腳本

-l代表日志檔案

3. 編輯JMX測試腳本

在linux 裡用 vim 編輯 XX.jmx 腳本 ,可以直接修改線程數,循環次數。

線程啟動時間,測試連結,參數化的檔案要上傳到伺服器上,然後修改路徑。

4. 問題

a.問題一:

測試中遇到問題一,報oom。

在執行 jmeter -n -t shouye.jmx -l shouye.jtl,在每台測試機并發3w線程時,測試機器報oom 記憶體溢出,導緻測試執行不下去,

解決方法:

  1. 檢視測試機記憶體大小,
  2. 本測試機記憶體16g,
  3. 更改執行jmeter的時候java虛拟機的記憶體
    1. 進入jmeter 和jmeter.sh 兩個檔案
      1. 注釋掉 HEAP="-Xms512m -Xmx512m" 和java $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
      2. 在最後一行添加這個java $JVM_ARGS -Xms2G -Xmx8G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar `dirname $0`/ApacheJMeter.jar "$@"兩個就可以修改jmeter 運作的jvm記憶體大小,這樣運作jmeter時,就是配置設定的記憶體最大變為8G,解決了 測試機報記憶體溢出的問題。

b. 問題二

  1. 測試中遇到問題二,連接配接數限制報socketexception
  2. 繼續執行 jmeter -n -t shouye.jmx -l shouye.jtl,在每台測試機并發3w線程時,測試機不報記憶體溢出,但是響應錯誤率很高

問題分析:

檢視日志得出,問題原因是 SocketException ,此問題是由于 測試機安裝後預設 最大連接配接數比較小。

用檢視連接配接數 netstat -an|wc -l 看了是1024,果然很小。

檢視連接配接數範圍 cat /proc/sys/net/ipv4/ip_local_port_range。

解決:

  1. 修改連結數,
    1. 調節至最大端口範圍echo net.ipv4.ip_local_port_range = 1024 65000 >> /etc/sysctl.conf
    2. 讓其生效 sysctl -p
  2. 設定最大可大開檔案數
    1. ulimit -n 102400
    2. 檢視最大開檔案數 ulimit -n。

至此測試機可以正常運作,

c.問題三

生成html報告,在3.0以上版本jmeter可以

進入jmeter bin 目錄中bin/jmeter.property 修改配置後顯示

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.default_delimiter=,           
儲存,每次在壓測跑完後才可生成報告,如果強制kill掉程序的話,生成報告會遇到報錯Error while processing samples:Mismatch between expected number of columns:14 and columns in CSV file:2, check your jmeter.save.saveservice.* configuration

解決方案

進入 XXX.jtl檔案中,用G 進入到檔案的最後一行,因為格式不全,導緻生成報錯,删掉最後一行不完整的資訊,再儲存,然後再執行jmeter -g shouye.jtl -e -o /usr/local/test/upload/apache-jmeter-3.0/testplan/shouyeresultReport,就可以生成html格式的報告,下載下傳到本地就可以打開。

5.測試執行時用到的linux指令

a.複制一個檔案到另一台測試機上 ,

scp tijiaodingdan.jmx [email protected]:/usr/local/test/upload/apache-jmeter-3.0/testplan           

b.檢視日志指令

tail -f jmeter.log           

c.檢視生成jtl 檔案具體日志裡面有報錯資訊 指令

tail -f  shouye.jtl            

d.檢視jmeter 程序号

ps -ef |grep jmeter 

# 用jps查找的隻是子程序号
# kill掉程序指令 kill -9 程序号  先kill父程序号 再kill子程序号           

繼續閱讀