Jmeter壓力測試筆記(6)性能調測-壓力並發-模擬生產環境數據

  問題原因找到了,那就好辦了。

    找到阿里雲技術人員,讓他們強行給我們上架了一個共享代理模式的Redis。  並重新進行壓力測試。

  哦豁~ 開心,壓力測試順利,異常率大大降低實際為: 

 

 

  資料庫DBA回饋,資料庫收到很多請求處理,資料庫開始正常工作。(之前都是,資料庫連接滿,但活躍連接只有1到5個)。 資料庫連接數在50到100之間波動,且基本都是活躍連接。

 

  NGINX和php那邊都工作正常,伺服器cpu壓力下降。各項功能都平穩。

 

  然後開始真真正正進行模擬生產用戶數據壓力測試:

  

   生產環境數據如下:

    高峰時期: 總並發連接數12w 活躍連接數10萬;新建連接數1300/s;吞吐量:6200/S。

    如何通過調整jmeter腳本的執行緒數,吞吐量來實現該場景,就得多次嘗試了。

 

   jmeter運行環境如下: centos7   java1.8.161; jmeter 5.2.1   4C8G。 阿里雲機器。

  

    1,實現並發連接數和活躍連接數。

      並發連接數=活躍連接數+非活躍連接數

        活躍連接數=jmeter執行緒數*執行機器數量

        非活躍連接數=tcp連接中斷數: 實際執行過程中發現:如果設置的吞吐量過高,會造成大量的非活躍連接數。與真實請求場景不一致。 後面細說。

    

       如何提升活躍連接數:——加機器+記憶體。沒其它辦法。現在的機器一般cpu都是夠用的。  實際設置1800執行緒運行時,機器只有20%的cpu使用率。

        

        通過測試的經驗計算,大概一個執行緒需要消耗3M記憶體。所有如果想跑2000執行緒,那麼你得設置虛擬機6000m,否則,會爆出記憶體溢出錯誤。

        通過命令啟動執行機:

        JVM_ARGS=”-Xms1024m -Xmx6000m” ./jmeter-server &     ####注意,不要超過自己機器實際能使用的記憶體!!!!留點空閑給機器本身用,否則會很卡,很慢。異常高

        我喜歡這種方式,方便調整記憶體。哈哈。

          順便寫幾個清理記憶體和殺進程的命令:

查看執行機運行日誌:
tail -f  apache-jmeter-5.2.1/bin/jmeter-server.log

查看1099埠:
netstat -an|grep 1099

查看java進程:
ps -ef|grep java

批量殺進程操作:我特別喜歡哈哈
ps -ef|grep java|awk '{print $2}'|xargs kill -9

統計查詢tcp 80埠數量:
netstat -nat|grep -i 80|wc -l

統計查詢tcp time_wait 埠數量:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a,s[a]}'

查看記憶體使用量:
free -m

同步快取:
sync

清理記憶體:建議在殺java進程後使用,先使用sync同步。
echo 3 > /proc/sys/vm/drop_caches

  實際運行效果,機器正常跑2000執行緒正常,不卡,不慢,非常happy~

  

   然後計算10萬用戶=10萬除以2000===50個機器~~~ 汗~~有點難申請。還要加5個調度機、、一共是55個機器~  1個調度機帶10個執行機。

     和大佬兇猛的溝通了一陣子~ 同意了。直接在阿里雲上複製已經調試好jmeter的執行機。刷刷刷刷~~~機器到手了。 反正阿里雲按量收費,用一天也沒多少錢。

   

    如何降低非活躍連接數呢?

      由於我設置的tcp連接超時周期為30秒,當我未對吞吐量進行限制時:發現非活躍連接數非常多。 這與生產環境不一致。(該測試結果圖片基於 1帶13執行機,用戶執行緒1500.當時的吞吐量為12000/s,大大超過實際的需求)

      

 

  生產環境數據:

 

 

  仔細琢磨計算了一下。生產10萬活躍用戶,才6200吞吐量,那麼。 2萬活躍用戶的吞吐量應該是===1300:

    這裡發現一個關鍵指標: 新建並發連接數:生產環境高峰期也就1300,而我 6000+;所以,會出現大量的非活躍連接請求就很正常了。

 

    解決辦法:使用jmeter定時器》》精準吞吐量計時器來對吞吐量進行限制。降低新建連接數,降低吞吐量。

    通過計算:20000活躍用戶吞吐量1300,那麼jmeter腳本2000執行緒對於吞吐量是130/s。額好低。不忍直視。習慣了幾千幾千上萬的,吞吐量。最後發現只要設置130。 

          所以:這裡有一個結論,真真的性能大神測試時,都不是像我這樣的搞茫茫多機器去跑,一般也就設置100到200執行緒,進行伺服器性能測試。通過性能調優來優化伺服器。通過對測試結果日誌的分析,來找到伺服器問題的。

             而不是像我這樣,去想著把伺服器搞掛,來複現問題…………  

    好了,設置好jmeter吞吐量,再進行一波測試。

 

 非活躍連接數大大降低~~達到理想要求。  但還是比較多~ 新建請求連接數1690~ 超過高峰1300. 還需要慢慢優化~

      

  腳本環境都調試完畢,以後,就開始加機器,測試吧~~~

  待補充: 等測完了再來補充

  

  

 

 

 

   

 

 

 

    

 

 

  

    

    

 

 

Tags: