Error code 10053,Software caused connection abort.總結

來源:互聯網
上載者:User
發現問題的應用情境
  C/S結構程式,請求響應採用非同步機制。即用戶端發送一個請求後不是一直等待這個結果,用戶端將請求存放在請求隊列並獲得一個JOBID,伺服器運行後將運行結果存放在響應隊列,用戶端定時查看響應隊列,根據JOBID定時從響應隊列中擷取結果。因此帶來的測試問題是受伺服器狀態影響,用戶端擷取結果的次數不固定。
測試指令碼樣本
  lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=localhost:8080", LrsLastArg);
  lrs_send("socket0", "buf56", LrsLastArg);
  lrs_receive("socket0", "buf57", LrsLastArg);
  GetJobID();
  do{
  lr_think_time(0.3);
  lrs_send("socket0", "buf58", LrsLastArg);
  lrs_receive("socket0", "buf59", LrsLastArg);
  }while(!CheckStatus());
  其中buf56、57是發送請求,buf58、59是迴圈去擷取結果並檢查返回的標誌位,若仍沒有結果返回則在一定時間後迴圈擷取結果,因此請求數不固定。
LR提示socket異常
  當我用lrs_create_socket建立串連之後,當這個socket串連的請求次數達到100次後,這個串連就不可用了,必須close後再重新create。LoadRunner提示錯誤:Error : socket0 - Software caused connection abort. Error code : 10053.


問題驗證
  一開始認為是LoadRunner對Socket的支援問題,因為同樣的測試方式在Rational Robot中可以通過。於是做了最簡單的一個實驗:
  1、用socket方式錄製訪問某個網頁並儲存(如baidu、或tomcat的預設頁面)
  2、添加迴圈方式去訪問
  結果證明在socket請求次數達到100後即無法再次訪問了(少數次數可以達到一百零幾)。
 
  指令碼如下:
  #include "lrs.h"
  int i;
  Action()
  {
  lr_think_time(1);
 
  lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=appsvr01:8080", LrsLastArg);
  i=1;
  do{
  lrs_send("socket0", "buf0", LrsLastArg);
  lrs_receive("socket0", "buf1", LrsLastArg);
  lr_output_message("-------------lrs request times: %d ", i);
  i++;
  lrs_send("socket0", "buf2", LrsLastArg);
  lrs_receive("socket0", "buf3", LrsLastArg);
  lr_output_message("-------------lrs request times: %d ", i);
  i++;
  lrs_send("socket0", "buf4", LrsLastArg);
  lrs_receive("socket0", "buf5", LrsLastArg);
  lr_output_message("-------------lrs request times: %d ", i);
  i++;
  lrs_send("socket0", "buf6", LrsLastArg);
  lrs_receive("socket0", "buf7", LrsLastArg);
  lr_output_message("-------------lrs request times: %d ", i);
  i++;
  }while(i<200);
  return 0;
  }
 
  LoadRunner VUGen日誌如下:
  ...
  lrs_send(socket0, buf2)
  Action.c(21): lrs_receive(socket0, buf3)
  Action.c(22): -------------lrs request times: 98
  Action.c(24): lrs_send(socket0, buf4)
  Action.c(25): lrs_receive(socket0, buf5)
  Action.c(26): -------------lrs request times: 99
  Action.c(28): lrs_send(socket0, buf6)
  Action.c(29): lrs_receive(socket0, buf7)
  Action.c(29): Mismatch (expected 1249 bytes, 1268 bytes actually received)
  Action.c(30): -------------lrs request times: 100
  Action.c(16): lrs_send(socket0, buf0)
  Action.c(17): lrs_receive(socket0, buf1)
  Action.c(17): Error : socket0 - Software caused connection abort. Error code : 10053.
  Abort was called from an action.
  Ending Vuser...
  Starting action vuser_end.
  vuser_end.c(12): lrs_cleanup()
  Ending action vuser_end.


新的發現
  在發現以上問題後百思不得其解之後即和一些測試朋友進行討論交流,但同樣沒有什麼頭緒。在一次交流中意外發現朋友的測試指令碼中串連的是80連接埠,於是推斷他是用IIS作為測試伺服器,突然意識到這是否和應用伺服器也有關,立即採用IIS作為伺服器進行測試,居然測試通過了,並沒有出現Socket串連問題。隨後用Weblogic進行測試也同樣通過。
初步結論
  由以上的各種驗證方法發現問題並非單獨由LoadRunner引起的,而是和測試的應用伺服器也有很大關係。僅當用LoadRunner測試Jboss、Tomcat伺服器時才會出現這種問題,而對IIS、Weblogic等問題並不存在。但另有一個奇怪的問題是採用Rational Robot用同樣的測試方法,所有的伺服器類型都沒有問題。


繼續探索
  後來進一步研究為何同樣的採用tomcat伺服器,在請求上有什麼不同差異導致了兩種測試載入器決然不同的測試結果。但通過Charles工具只是發現了一些請求上的細微差異,並不會造成此問題的發生。於是此疑案懸而未決,希望有志之士加入一起研究,共同探索其中奧秘。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.