<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    放翁(文初)的一畝三分地

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks
     

    SIP的第四期結束了,因為控制策略的豐富,早先的的壓力測試結果已經無法反映在高并發和高壓力下SIP的運行狀況,因此需要重新作壓力測試。跟在測試人員后面做了快一周的壓力測試,壓力測試的報告也正式出爐,本來也就算是告一段落,但第二天測試人員說要修改報告,由于這次作壓力測試的同學是第一次作,有一個指標沒有注意,因此需要修改幾個測試結果。那個沒有注意的指標就是load average,他和我一樣開始只是注意了CPU,內存的使用狀況,而沒有太注意這個指標,這個指標與他們通常的限制(10左右)有差別。重新測試的結果由于這個指標被要求壓低,最后的報告顯然不如原來的好看。自己也沒有深入過壓力測試,但是覺得不搞明白對將來機器配置和擴容都會有影響,因此去問了DBASA,得到的結果相差很大,看來不得不自己去找找問題的根本所在了。

           通過下面的幾個部分的了解,可以一步一步的找出Load Average在壓力測試中真正的作用。

    CPU時間片

           為了提高程序執行效率,大家在很多應用中都采用了多線程模式,這樣可以將原來的序列化執行變為并行執行,任務的分解以及并行執行能夠極大地提高程序的運行效率。但這都是代碼級別的表現,而硬件是如何支持的呢?那就要靠CPU的時間片模式來說明這一切。程序的任何指令的執行往往都會要競爭CPU這個最寶貴的資源,不論你的程序分成了多少個線程去執行不同的任務,他們都必須排隊等待獲取這個資源來計算和處理命令。先看看單CPU的情況。下面兩圖描述了時間片模式和非時間片模式下的線程執行的情況:


    1 非時間片線程執行情況


    2 非時間片線程執行情況

           在圖一中可以看到,任何線程如果都排隊等待CPU資源的獲取,那么所謂的多線程就沒有任何實際意義。圖二中的CPU Manager只是我虛擬的一個角色,由它來分配和管理CPU的使用狀況,此時多線程將會在運行過程中都有機會得到CPU資源,也真正實現了在單CPU的情況下實現多線程并行處理。

           CPU的情況只是單CPU的擴展,當所有的CPU都滿負荷運作的時候,就會對每一個CPU采用時間片的方式來提高效率。

           Linux的內核處理過程中,每一個進程默認會有一個固定的時間片來執行命令(默認為1/100秒),這段時間內進程被分配到CPU,然后獨占使用。如果使用完,同時未到時間片的規定時間,那么就主動放棄CPU的占用,如果到時間片尚未完成工作,那么CPU的使用權也會被收回,進程將會被中斷掛起等待下一個時間片。

    CPU利用率和Load Average的區別

           壓力測試不僅需要對業務場景的并發用戶等壓力參數作模擬,同時也需要在壓力測試過程中隨時關注機器的性能情況,來確保壓力測試的有效性。當服務器長期處于一種超負荷的情況下運行,所能接收的壓力并不是我們所認為的可接受的壓力。就好比項目經理在給一個人估工作量的時候,每天都讓這個人工作12個小時,那么所制定的項目計劃就不是一個合理的計劃,那個人遲早會垮掉,而影響整體的項目進度。

    CPU利用率在過去常常被我們這些外行認為是判斷機器是否已經到了滿負荷的一個標準,看到50%-60%的使用率就認為機器就已經壓到了臨界了。CPU利用率,顧名思義就是對于CPU的使用狀況,這是對一個時間段內CPU使用狀況的統計,通過這個指標可以看出在某一個時間段內CPU被占用的情況,如果被占用時間很高,那么就需要考慮CPU是否已經處于超負荷運作,長期超負荷運作對于機器本身來說是一種損害,因此必須將CPU的利用率控制在一定的比例下,以保證機器的正常運作。

    Load AverageCPULoad,它所包含的信息不是CPU的使用率狀況,而是在一段時間內CPU正在處理以及等待CPU處理的進程數之和的統計信息,也就是CPU使用隊列的長度的統計信息。為什么要統計這個信息,這個信息的對于壓力測試的影響究竟是怎么樣的,那就通過一個類比來解釋CPU利用率和Load Average的區別以及對于壓力測試的指導意義。

    我們將CPU就類比為電話亭,每一個進程都是一個需要打電話的人。現在一共有4個電話亭(就好比我們的機器有4核),有10個人需要打電話。現在使用電話的規則是管理員會按照順序給每一個人輪流分配1分鐘的使用電話時間,如果使用者在1分鐘內使用完畢,那么可以立刻將電話使用權返還給管理員,如果到了1分鐘電話使用者還沒有使用完畢,那么需要重新排隊,等待再次分配使用。


    3 電話使用場景

           上圖中對于使用電話的用戶又作了一次分類,1min的代表這些使用者占用電話時間小于等于1min2min表示使用者占用電話時間小于等于2min,以此類推。根據電話使用規則,1min的用戶只需要得到一次分配即可完成通話,而其他兩類用戶需要排隊兩次到三次。

           電話的利用率 = sum (active use cpu time)/period

    每一個分配到電話的使用者使用電話時間的總和去除以統計的時間段。這里需要注意的是是使用電話的時間總和(sum(active use cpu time)),這與占用時間的總和(sum(occupy cpu time))是有區別的。(例如一個用戶得到了一分鐘的使用權,在10秒鐘內打了電話,然后去查詢號碼本花了20秒鐘,再用剩下的30秒打了另一個電話,那么占用了電話1分鐘,實際只是使用了40秒)

    電話的Average Load體現的是在某一統計時間段內,所有使用電話的人加上等待電話分配的人一個平均統計。

    電話利用率的統計能夠反映的是電話被使用的情況,當電話長期處于被使用而沒有的到足夠的時間休息間歇,那么對于電話硬件來說是一種超負荷的運作,需要調整使用頻度。而電話Average Load卻從另一個角度來展現對于電話使用狀態的描述,Average Load越高說明對于電話資源的競爭越激烈,電話資源比較短缺。對于資源的申請和維護其實也是需要很大的成本,所以在這種高Average Load的情況下電話資源的長期“熱競爭”也是對于硬件的一種損害。

    低利用率的情況下是否會有高Load Average的情況產生呢?理解占有時間和使用時間就可以知道,當分配時間片以后,是否使用完全取決于使用者,因此完全可能出現低利用率高Load Average的情況。由此來看,僅僅從CPU的使用率來判斷CPU是否處于一種超負荷的工作狀態還是不夠的,必須結合Load Average來全局的看CPU的使用情況和申請情況。

    所以回過頭來再看測試部對于Load Average的要求,在我們機器為8CPU的情況下,控制在10 Load左右,也就是每一個CPU正在處理一個請求,同時還有2個在等待處理。看了看網上很多人的介紹一般來說Load簡單的計算就是2* CPU個數減去1-2左右(這個只是網上看來的,未必是一個標準)。

    補充幾點:

    1.對于CPU利用率和CPU Load Average的結果來判斷性能問題。首先低CPU利用率不表明CPU不是瓶頸,競爭CPU的隊列長期保持較長也是CPU超負荷的一種表現。對于應用來說可能會去花時間在I/O,Socket等方面,那么可以考慮是否后這些硬件的速度影響了整體的效率。

    這里最好的樣板范例就是我在測試中發現的一個現象:SIP當前在處理過程中,為了提高處理效率,將控制策略以及計數信息都放置在Memcached Cache里面,當我將Memcached Cache配置擴容一倍以后,CPU的利用率以及Load都有所下降,其實也就是在處理任務的過程中,等待Socket的返回對于CPU的競爭也產生了影響。

    2.未來多CPU編程的重要性。現在服務器的CPU都是多CPU了,我們的服務器處理能力已經不再按照摩爾定律來發展。就我上面提到的電話亭場景來看,對于三種不同時間需求的用戶來說,采用不同的分配順序,我們可看到的Load Average就會有不同。假設我們統計Load的時間段為2分鐘,如果將電話分配的順序按照:1min的用戶,2min的用戶,3min的用戶來分配,那么我們的Load Average將會最低,采用其他順序將會有不同的結果。所以未來的多CPU編程可以更好的提高CPU的利用率,讓程序跑的更快。

    以上所提到的內容未必都是很準確或者正確,如果有任何的偏差也請大家指出,可以糾正一些不清楚的概念。

    posted on 2008-06-30 17:35 岑文初 閱讀(37492) 評論(17)  編輯  收藏

    評論

    # re: 理解Load Average做好壓力測試 2008-06-30 22:44 yeshucheng
    通俗易懂,很不錯!
    很多場景可能真的要在像阿里這樣的公司才能親身體會深刻  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2008-10-29 15:32 xiao
    很好!
      回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2009-05-15 22:15 鴨嘴
    好文章。  回復  更多評論
      

    # re: 理解Load Average做好壓力測試[未登錄] 2009-07-09 16:42 Brian
    好文好文好文  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2009-07-27 12:29 吾同樹
    很好,這次解決一些疑惑了,以前總是不明白CPU 利用率很底可是load average 卻一直很高的原因。  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2010-05-17 15:12 dreamail
    對于在I/O和Wait的進程來說,應該不在競爭隊列里的。
    不過確實好文,學習了。  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2011-01-06 14:43 sealcomeback
    寫的不錯,很專業  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2011-05-12 10:31 小丫頭
    好文章  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2011-07-01 17:02 f
    跟阿里有個P關系啊,2B@yeshucheng
      回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2011-08-16 20:44 淘寶實習生
    很好的文章,放翁表達能力確實很強
    不過看了后,有兩個不是很明白的點,希望解答。
    首先,多線程模式并不是在單CPU模式下就提高不了效率了吧? 多線程提高性能個人感覺還是很明顯的,一是大部分應用都會有較多IO/SOCKET等阻塞,此時多線程可以極大的提高性能,關鍵看IO和CPU計算的比例。
    二是,在cpu load average中,被IO和socket阻塞的線程,此時根據線程、進程切換模型,他們應該是屬于阻塞的,不在cpu load 隊列范圍內吧?
    而且,以1min打電話的例子,如果20秒翻電話本(IO),貌似調度進程中,此時會將CPU調度給另外一個進程?
    可是,如果有多個任務(多個人在排隊打電話,),一有IO就調度(有人翻電話本時,就讓另外一個人先打)的話,那么CPU的消耗應該只有調度線程的上下文切換開銷(進出電話亭),那么CPU的利用率,應該還是會比較高吧?

      回復  更多評論
      

    # re: 理解Load Average做好壓力測試[未登錄] 2011-12-13 08:54 will
    請問在Ubuntu下Gnome上有個監視器,其中有內存、CPU、Net、磁盤讀寫、Swap Space 及 System Load Average. 這里的System Load Average 是指什么呢?它一般在剛啟動后值會比較高,是指CPU的等待隊列還是 系統尚未加載的服務之類的等待隊列呢? 感覺有點像就是指CPU Load Average, 不知是不是這樣?  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2012-09-04 07:21 froth
    請問一下,load average中指cpu,還是指核心數?  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2013-03-29 09:20 測試
    一頭霧水,想看懂費勁  回復  更多評論
      

    # re: 理解Load Average做好壓力測試[未登錄] 2013-09-06 10:16 leo
    @淘寶實習生,對于第一個問題,放翁是站在cpu的角度來講的,意思就是說,在單個cpu情況下,管你多少個線程 ,只能串行化,一個一個來。站在業務的角度,多線程肯定是有必要的。
    對于第二個問題,你只說明了在某種特點的情況下,不足以表征整個問題。例如,cpu給我了時間片,我沒有執行任務,也是sleep掉,那么有可能其他線程也還是執行不了  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2013-12-10 11:45 simia
    好像有些懂了,謝謝  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2014-11-17 17:40 Tomato
    “一有IO就調度(有人翻電話本時,就讓另外一個人先打)的話,“我認為不會有這種情況發生,CPU在某個時間片內處理數據的話,會先把數據加載到內存的@淘寶實習生  回復  更多評論
      

    # re: 理解Load Average做好壓力測試 2015-08-18 18:10 show
    怎么看cpu的使用率和占用率  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品无码一二区免费| 大学生高清一级毛片免费| 五月天婷亚洲天综合网精品偷| 亚洲激情视频图片| 麻豆高清免费国产一区| 亚洲邪恶天堂影院在线观看| 国内精品久久久久影院免费 | 精品国产污污免费网站| 亚洲精品视频久久久| 最好2018中文免费视频| 亚洲不卡无码av中文字幕| 免费看黄福利app导航看一下黄色录像 | 亚洲精品私拍国产福利在线| 99精品国产成人a∨免费看| 亚洲乱亚洲乱淫久久| 亚欧人成精品免费观看| 亚洲ts人妖网站| 日韩毛片免费在线观看| 美女扒开尿口给男人爽免费视频 | 日本免费中文视频| 中文字幕亚洲综合精品一区| 欧洲一级毛片免费| 亚洲国产av玩弄放荡人妇| www国产亚洲精品久久久| 美女无遮挡拍拍拍免费视频 | 国产精品酒店视频免费看| 偷自拍亚洲视频在线观看| 日韩一卡2卡3卡4卡新区亚洲| 在线毛片片免费观看| 亚洲国产日韩在线成人蜜芽| 暖暖在线日本免费中文| 国产久爱免费精品视频| 亚洲视频免费一区| 国产一区二区三区免费视频| 99视频在线免费观看| 亚洲人成人77777网站不卡| 免费在线不卡视频| 久久久久久成人毛片免费看| 亚洲第一区二区快射影院| 亚洲美女在线国产| 91成人免费在线视频|