• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    對LR中報WSA_IO_pending的解析

    發布: 2008-10-08 14:36 | 作者: Zee | 來源: Zee 的博客 | 查看: 251次 | 進入軟件測試論壇討論

    領測軟件測試網 首先:謝謝曹向志老師的指點。
     
      下面來看一下這個問題:

    問題出現
      前幾天一位珠海網友highoo問了一個問題:在使用LR進行性能測試的過程中出現了錯誤:WSA_IO_PENDING,Message Code 27740。
    官方troubleshooting如下:
    Message Code 27740
    Overlapped transmission of request to '%1' for URL 'URL' failed.

    The transmission of data to the server failed. It could be a network, router, or server problem. The word Overlapped refers to the way LoadRunner sends data in order to get a Web Page Breakdown.

    Troubleshooting
    Add the following statement to the beginning of the script to disable the breakdown of the "First Buffer" into server and network time: web_set_sockets_option("OVERLAPPED_SEND", "0");
     
     

    解決方式
     
    添加:web_set_sockets_option("OVERLAPPED_SEND", "0")語句。
     
    解析原因
     
      IO Overlapped是一種異步IO,在socket層,只有少量數據發送的時候,只要create new thread,send, receive,就可以了。但是,當數據量增加的時候,要考慮資源的充分利用,也要避免資源的擁塞隊列,如果創建線程過多,和CPU內存磁盤等資源的交互過多,可能導致擁塞出現。在這時就要考慮資源的擁塞問題了,在socket中有兩種處理的方式:
     
    1, IO overlapped
    工作方式是這樣的:
      A:調用WSARecv, WSARecvFrom, WSASend, WSASendTo, 或 WSAIoctl.等函數,傳入overlapped參數,表示這個函數要執行這個動作;
      B:調用WSAGetOverlappedResult函數來取數據;
      C:再執行A,調用另一個帶有overlapped的參數另一個線程交替處理。
     
      這種方式,可以處理一定量的數據。但是在大數據量的時候,這種處理方式顯示出了先天的不足。因為使用這種方式會創建新的線程,這樣勢必增加系統的開銷。當出現成千上萬的線程時,系統的開銷已經相當大了,因為要頻繁的在上下文之間切換。所以在socket編程里,這種方式,處理線程數不是很大的情況下是比較有優勢的。
     
    2, IO completion port
      在winsock2中引入了異步IO的API:IOCP。其實這里也是overlapped的理念。但有不同,如下描述:
      這種異步IO的工作方式是:先開一些線程,處在hold的狀態下,應用線程和completion port關聯起來,當某個線程要處理數據時,就與completion port進行通信,這樣就可以進行socket操作了,這種處理方式就是在剛開始的時候,消耗一些資源開線程,處理大數據量的socket通信,如圖:
                
      這樣一來completion port就可以處理threads和IO Device之間的交互了。
    打個比方來說:
      有很多人早上都去坐地鐵,但是,如果不限制人往站臺走的速度,售票口就要增加很多個才能處理乘客的請求,這樣成本就會增加很多,并且站臺上最后會擠滿了人,最后導致危機出現;而現在,在進入地鐵的時候,加上有序的限流措施,這樣一來售票口不用增加,也可以處理乘客的請求,站臺上就不會有那么大的壓力。
      在我的理解中,completion port就有著這么一個功能。在處理大數據量的時候,它起著維持秩序的作用。
     
      以上為socket在處理數據量較大時的兩種方式。
      而在性能測試中,如果開的線程過多,可能某些資源不足導致不停的上下文切換,就會有thread得不到資源,從而出現pending。
      如果我們關閉了overlapped,就會同步執行。這時如果CPU速度夠快(同時其他資源是足夠用的),是可以處理所有請求,并且不會出現pending的。但是,如果thread開的越來越多,也可能導致CPU處理不了,從而出現CPU頻繁的上下文切換,或者隊列增長。最后出錯。這時,我們可以針對性的來提出解決方案了。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: 解析 WSA 中報 pending


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>