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

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

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

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

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評(píng)論 :: 0 Trackbacks
     

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

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

    CPU時(shí)間片

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


    1 非時(shí)間片線程執(zhí)行情況


    2 非時(shí)間片線程執(zhí)行情況

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

           CPU的情況只是單CPU的擴(kuò)展,當(dāng)所有的CPU都滿負(fù)荷運(yùn)作的時(shí)候,就會(huì)對(duì)每一個(gè)CPU采用時(shí)間片的方式來提高效率。

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

    CPU利用率和Load Average的區(qū)別

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

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

    Load AverageCPULoad,它所包含的信息不是CPU的使用率狀況,而是在一段時(shí)間內(nèi)CPU正在處理以及等待CPU處理的進(jìn)程數(shù)之和的統(tǒng)計(jì)信息,也就是CPU使用隊(duì)列的長(zhǎng)度的統(tǒng)計(jì)信息。為什么要統(tǒng)計(jì)這個(gè)信息,這個(gè)信息的對(duì)于壓力測(cè)試的影響究竟是怎么樣的,那就通過一個(gè)類比來解釋CPU利用率和Load Average的區(qū)別以及對(duì)于壓力測(cè)試的指導(dǎo)意義。

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


    3 電話使用場(chǎng)景

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

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

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

    電話的Average Load體現(xiàn)的是在某一統(tǒng)計(jì)時(shí)間段內(nèi),所有使用電話的人加上等待電話分配的人一個(gè)平均統(tǒng)計(jì)。

    電話利用率的統(tǒng)計(jì)能夠反映的是電話被使用的情況,當(dāng)電話長(zhǎng)期處于被使用而沒有的到足夠的時(shí)間休息間歇,那么對(duì)于電話硬件來說是一種超負(fù)荷的運(yùn)作,需要調(diào)整使用頻度。而電話Average Load卻從另一個(gè)角度來展現(xiàn)對(duì)于電話使用狀態(tài)的描述,Average Load越高說明對(duì)于電話資源的競(jìng)爭(zhēng)越激烈,電話資源比較短缺。對(duì)于資源的申請(qǐng)和維護(hù)其實(shí)也是需要很大的成本,所以在這種高Average Load的情況下電話資源的長(zhǎng)期“熱競(jìng)爭(zhēng)”也是對(duì)于硬件的一種損害。

    低利用率的情況下是否會(huì)有高Load Average的情況產(chǎn)生呢?理解占有時(shí)間和使用時(shí)間就可以知道,當(dāng)分配時(shí)間片以后,是否使用完全取決于使用者,因此完全可能出現(xiàn)低利用率高Load Average的情況。由此來看,僅僅從CPU的使用率來判斷CPU是否處于一種超負(fù)荷的工作狀態(tài)還是不夠的,必須結(jié)合Load Average來全局的看CPU的使用情況和申請(qǐng)情況。

    所以回過頭來再看測(cè)試部對(duì)于Load Average的要求,在我們機(jī)器為8個(gè)CPU的情況下,控制在10 Load左右,也就是每一個(gè)CPU正在處理一個(gè)請(qǐng)求,同時(shí)還有2個(gè)在等待處理。看了看網(wǎng)上很多人的介紹一般來說Load簡(jiǎn)單的計(jì)算就是2* CPU個(gè)數(shù)減去1-2左右(這個(gè)只是網(wǎng)上看來的,未必是一個(gè)標(biāo)準(zhǔn))。

    補(bǔ)充幾點(diǎn):

    1.對(duì)于CPU利用率和CPU Load Average的結(jié)果來判斷性能問題。首先低CPU利用率不表明CPU不是瓶頸,競(jìng)爭(zhēng)CPU的隊(duì)列長(zhǎng)期保持較長(zhǎng)也是CPU超負(fù)荷的一種表現(xiàn)。對(duì)于應(yīng)用來說可能會(huì)去花時(shí)間在I/O,Socket等方面,那么可以考慮是否后這些硬件的速度影響了整體的效率。

    這里最好的樣板范例就是我在測(cè)試中發(fā)現(xiàn)的一個(gè)現(xiàn)象:SIP當(dāng)前在處理過程中,為了提高處理效率,將控制策略以及計(jì)數(shù)信息都放置在Memcached Cache里面,當(dāng)我將Memcached Cache配置擴(kuò)容一倍以后,CPU的利用率以及Load都有所下降,其實(shí)也就是在處理任務(wù)的過程中,等待Socket的返回對(duì)于CPU的競(jìng)爭(zhēng)也產(chǎn)生了影響。

    2.未來多CPU編程的重要性。現(xiàn)在服務(wù)器的CPU都是多CPU了,我們的服務(wù)器處理能力已經(jīng)不再按照摩爾定律來發(fā)展。就我上面提到的電話亭場(chǎng)景來看,對(duì)于三種不同時(shí)間需求的用戶來說,采用不同的分配順序,我們可看到的Load Average就會(huì)有不同。假設(shè)我們統(tǒng)計(jì)Load的時(shí)間段為2分鐘,如果將電話分配的順序按照:1min的用戶,2min的用戶,3min的用戶來分配,那么我們的Load Average將會(huì)最低,采用其他順序?qū)?huì)有不同的結(jié)果。所以未來的多CPU編程可以更好的提高CPU的利用率,讓程序跑的更快。

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

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

    評(píng)論

    # re: 理解Load Average做好壓力測(cè)試 2008-06-30 22:44 yeshucheng
    通俗易懂,很不錯(cuò)!
    很多場(chǎng)景可能真的要在像阿里這樣的公司才能親身體會(huì)深刻  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2008-10-29 15:32 xiao
    很好!
      回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2009-05-15 22:15 鴨嘴
    好文章。  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試[未登錄] 2009-07-09 16:42 Brian
    好文好文好文  回復(fù)  更多評(píng)論
      

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

    # re: 理解Load Average做好壓力測(cè)試 2010-05-17 15:12 dreamail
    對(duì)于在I/O和Wait的進(jìn)程來說,應(yīng)該不在競(jìng)爭(zhēng)隊(duì)列里的。
    不過確實(shí)好文,學(xué)習(xí)了。  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2011-01-06 14:43 sealcomeback
    寫的不錯(cuò),很專業(yè)  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2011-05-12 10:31 小丫頭
    好文章  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2011-07-01 17:02 f
    跟阿里有個(gè)P關(guān)系啊,2B@yeshucheng
      回復(fù)  更多評(píng)論
      

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

      回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試[未登錄] 2011-12-13 08:54 will
    請(qǐng)問在Ubuntu下Gnome上有個(gè)監(jiān)視器,其中有內(nèi)存、CPU、Net、磁盤讀寫、Swap Space 及 System Load Average. 這里的System Load Average 是指什么呢?它一般在剛啟動(dòng)后值會(huì)比較高,是指CPU的等待隊(duì)列還是 系統(tǒng)尚未加載的服務(wù)之類的等待隊(duì)列呢? 感覺有點(diǎn)像就是指CPU Load Average, 不知是不是這樣?  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2012-09-04 07:21 froth
    請(qǐng)問一下,load average中指cpu,還是指核心數(shù)?  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2013-03-29 09:20 測(cè)試
    一頭霧水,想看懂費(fèi)勁  回復(fù)  更多評(píng)論
      

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

    # re: 理解Load Average做好壓力測(cè)試 2013-12-10 11:45 simia
    好像有些懂了,謝謝  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2014-11-17 17:40 Tomato
    “一有IO就調(diào)度(有人翻電話本時(shí),就讓另外一個(gè)人先打)的話,“我認(rèn)為不會(huì)有這種情況發(fā)生,CPU在某個(gè)時(shí)間片內(nèi)處理數(shù)據(jù)的話,會(huì)先把數(shù)據(jù)加載到內(nèi)存的@淘寶實(shí)習(xí)生  回復(fù)  更多評(píng)論
      

    # re: 理解Load Average做好壓力測(cè)試 2015-08-18 18:10 show
    怎么看cpu的使用率和占用率  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 破了亲妺妺的处免费视频国产| 91免费精品国自产拍在线不卡| 免费中文字幕一级毛片| 亚洲色大成网站WWW国产| 一二三四影视在线看片免费 | 亚洲精品久久无码av片俺去也| 日本免费网址大全在线观看| 亚洲六月丁香六月婷婷蜜芽| av无码国产在线看免费网站| 亚洲一区二区三区免费视频| 69成人免费视频无码专区| 亚洲高清毛片一区二区| 免费人成视频x8x8入口| 最新亚洲人成无码网站| 亚洲国产成人乱码精品女人久久久不卡| 国产成人综合亚洲一区| 中文字幕亚洲综合久久男男| 国产一精品一AV一免费| 337p日本欧洲亚洲大胆精品555588 | 亚洲精品永久在线观看| 亚洲 综合 国产 欧洲 丝袜| 中文字幕无线码免费人妻| 亚洲av女电影网| 国产桃色在线成免费视频| 含羞草国产亚洲精品岁国产精品 | 又粗又硬免费毛片| 青青操视频在线免费观看| 亚洲熟妇无码久久精品| 日本高清免费不卡视频| 精品人妻系列无码人妻免费视频| 亚洲国产一区二区a毛片| a级毛片无码免费真人| 一区二区三区AV高清免费波多| 亚洲AV无码久久精品色欲| 欧美在线看片A免费观看| 特级毛片爽www免费版| 337p日本欧洲亚洲大胆色噜噜| 又大又粗又爽a级毛片免费看| 精品国产污污免费网站| 亚洲午夜精品久久久久久app | 免费很黄很色裸乳在线观看|