qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          碼農(nóng)的性能測試

           1.如何理解TPS
            性能指標(biāo)的一個(gè)重要因素。TPS(Transaction Per Second,每秒事物數(shù)),單位時(shí)間內(nèi)完成的事物的數(shù)量。TPS的計(jì)算一般是通過的事物除以時(shí)間。
            TPS是跟測試腳本中事物(Transaction)相關(guān)聯(lián)的。
            在性能測試工具中,吞吐量也被稱之為TPS(Transaction Per Second,每秒事物數(shù))。吞吐量直接體現(xiàn)系統(tǒng)性能的承載能力,是指單位時(shí)間內(nèi)處理的客戶請求的數(shù)量。其計(jì)量單位可以根據(jù)需求不同而不同,比如請求數(shù)/秒,頁面數(shù)/秒,業(yè)務(wù)數(shù)/小時(shí)(可以說下我們采集項(xiàng)目中吞吐量可以用 解析卡數(shù)/秒)。
            對于交互式應(yīng)用,用戶直接的體驗(yàn)就是“響應(yīng)時(shí)間”,通過“并發(fā)用戶數(shù)”和“響應(yīng)時(shí)間”可以確定系統(tǒng)的性能規(guī)劃;但對于非交互式應(yīng)用,用“吞吐量”來描述用戶對系統(tǒng)的性能期望可能更加合理。
            吞吐量作為性能測試的主要關(guān)鍵指標(biāo)。吞吐量和并發(fā)用戶數(shù)之前存在著一定的聯(lián)系。在沒有性能瓶頸的時(shí)候,吞吐量隨著虛擬用戶數(shù)的增加而增加(計(jì)算公式為 吞吐量 = (VU個(gè)數(shù) * 每個(gè)VU發(fā)出請求數(shù)) / 單位時(shí)間)。如果性能遇到瓶頸,吞吐量與VU數(shù)理之間就不再符合這個(gè)關(guān)系。
            2.如何理解線程調(diào)用
            線程(thread)是”進(jìn)程”中某個(gè)單一順序的控制流。也被稱為輕量進(jìn)程。
            線程的好處:
            1 創(chuàng)建一個(gè)新線程花費(fèi)的時(shí)間少。
            2.(JAVA中線程具有新的,可運(yùn)行,運(yùn)行,等待/阻塞/休眠,死亡等幾種狀態(tài)。)在未阻塞情況下,兩個(gè)線程(在同一進(jìn)程中的)的切換時(shí)間少。在阻塞情況下,線程間切換將產(chǎn)生上下文切換。
            3.由于同一個(gè)進(jìn)程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。
            4 線程能獨(dú)立執(zhí)行,能充分利用和發(fā)揮處理機(jī)與外圍設(shè)備并行工作的能力。
            使用線程可以把占據(jù)長時(shí)間的程序中的任務(wù)放到后臺(tái)去處理
            ps:JAVA中可以通過jstack或者jprofiler dump出線程所執(zhí)行的堆棧信息。
            3.如何理解響應(yīng)時(shí)間
            響應(yīng)時(shí)間反映完成某個(gè)業(yè)務(wù)所需要的時(shí)間。
            在性能測試中是通過測試工具的事物函數(shù)來完成響應(yīng)時(shí)間的統(tǒng)計(jì)。事物函數(shù)會(huì)記錄開始事物和結(jié)束事物的時(shí)間差,使用Transaction Response Time這個(gè)詞來說明。
            響應(yīng)時(shí)間主要包括網(wǎng)絡(luò)時(shí)間,服務(wù)器處理時(shí)間,網(wǎng)絡(luò)延遲
            對于交互式應(yīng)用,用戶直接的體驗(yàn)就是“響應(yīng)時(shí)間”,通過“并發(fā)用戶數(shù)”和“響應(yīng)時(shí)間”可以確定系統(tǒng)的性能規(guī)劃;
            對于交互式應(yīng)用,響應(yīng)時(shí)間出現(xiàn)拐點(diǎn)系統(tǒng)就可能出現(xiàn)瓶頸
            4.如何理解性能建模(可分類回答)
            這個(gè)不會(huì),之前找到一個(gè)資料,分享一下吧 http://www.docin.com/p-452373613.html
            5.如何理解響應(yīng)時(shí)間,TPS曲線和用戶之間的關(guān)系
            隨著用戶數(shù)量的增加,在未出現(xiàn)瓶頸前響應(yīng)時(shí)間保持穩(wěn)定,TPS值和并發(fā)用戶數(shù)成線性關(guān)系,出現(xiàn)瓶頸后響應(yīng)時(shí)間變長,TPS基本保持不變或開始下降。
            6.在LoadRunner中為何要設(shè)置思考時(shí)間和pacing?
            1)Think time,思考時(shí)間。可以通過設(shè)置思考時(shí)間,來模擬真實(shí)用戶在操作過程中的等待時(shí)間。從定義上來看,think time是在iteration內(nèi)部的某個(gè)action中各個(gè)步驟的間隔時(shí)間。
            2)Pacing,步調(diào)。可以通過設(shè)置兩次迭代(iteration)之間的間隔時(shí)間,來調(diào)整各個(gè)action之間的步調(diào)(或者稱之為節(jié)奏)。
            3)pacing和think time都是可以模擬現(xiàn)實(shí)世界中的停頓。對于復(fù)雜場景,這個(gè)停頓要靠pacing來完成。不過,pacing怎么設(shè)置才最合適,是需要研究用戶行為才能定的。
           操作系統(tǒng)
            1.如何判斷CPU、內(nèi)存、磁盤的瓶頸?
            CPU瓶頸:
            1) 查看CPU利用率。建議CPU指標(biāo)如下
            a) User Time:65%~70%
            b) System Time:30%~35%
            c) Idle:0%~5%
            如果us,sy高于這個(gè)指標(biāo)可以判斷CPU有瓶頸
            使用top查看
            查看運(yùn)行隊(duì)列
            每個(gè)CPU都會(huì)維持一個(gè)運(yùn)行隊(duì)列,理想情況下,調(diào)度器會(huì)不斷讓隊(duì)列中的進(jìn)程運(yùn)行。進(jìn)程不是處在sleep狀態(tài)就是run able狀態(tài)。如果CPU過載,就會(huì)出現(xiàn)調(diào)度器跟不上系統(tǒng)的要求,導(dǎo)致可運(yùn)行的進(jìn)程會(huì)填滿隊(duì)列。隊(duì)列愈大,程序執(zhí)行時(shí)間就愈長。“load”用來表示運(yùn)行隊(duì)列,用top 命令我們可以看到CPU一分鐘,5分鐘和15分鐘內(nèi)的運(yùn)行隊(duì)列的大小。這個(gè)值越大表明系統(tǒng)負(fù)荷越大。超過 1.00,那么說明CPU已經(jīng)超出負(fù)荷,交通嚴(yán)重的擁堵。
            使用top或者uptime查看
            查看上下文切換
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            使用vmstat查看cs
            結(jié)論:
            檢查system的運(yùn)行隊(duì)列,以及確定不要超出每個(gè)處理器3個(gè)可運(yùn)行狀態(tài)線程的限制.
            確定CPU 利用率中user/system比例維持在70/30
            當(dāng)CPU 開銷更多的時(shí)間在system mode,那就說明已經(jīng)超負(fù)荷并且應(yīng)該嘗試重新調(diào)度優(yōu)先級(jí)
            當(dāng)I/O 處理得到增長,CPU 范疇的應(yīng)用處理將受到影響
            ps:對于JAVA應(yīng)用,CPU瓶頸可以通過jprofiler監(jiān)控分析
            內(nèi)存瓶頸:
            1.查看利用率(free)
            used:已使用多大。
            free:可用有多少。
            Shared:多個(gè)進(jìn)程共享的內(nèi)存總額。
            Buffers/cached:磁盤緩存的大小。
            2.查看頁交換,swap交換(po,pi,so,si),磁盤IO(vmstat)
            si: 每秒從交換區(qū)寫到內(nèi)存的大小
            so: 每秒寫入交換區(qū)的內(nèi)存大小
            page in :分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In
            page out : 分頁(Page)寫入磁盤的過程被稱作Page-Out
            另外在進(jìn)行頁交換的時(shí)候,會(huì)產(chǎn)生磁盤IO,還需注意bi,bo
            Bo 磁盤塊頁面從內(nèi)存到文件或交換設(shè)備的總額
            Bi 磁盤塊頁面從文件或交換設(shè)備到內(nèi)存的總額
            3.page fault(pidstat -r,sar -B )
            minflt/s: 每秒次缺頁錯(cuò)誤次數(shù)(minor page faults),次缺頁錯(cuò)誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)
            majflt/s: 每秒主缺頁錯(cuò)誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生
            其中sar -B中fault/s表示每秒鐘minflt,majflt的和。
            結(jié)論:
            監(jiān)控虛擬內(nèi)存性能由以下幾個(gè)部分組成:
            1.當(dāng)系統(tǒng)中出現(xiàn)較少的頁錯(cuò)誤,獲得最好的響應(yīng)時(shí)間,是因?yàn)閙emory caches(譯注:內(nèi)存高速緩存)比disk caches更快(譯注:磁盤高速緩存).
            2.較少的空閑內(nèi)存,是件好事情,那意味著緩存的使用更有效率.除非在不斷的寫入swap device和disk.
            3.如果系統(tǒng)不斷報(bào)告,swap device總是繁忙中,那就意味著內(nèi)存已經(jīng)不足,需要升級(jí)了.
            zee:
            如果用做緩沖區(qū)(buff)和快速緩存(Cache)的物理內(nèi)存不斷地增加,而空閑的物理內(nèi)存(free)不斷地減少,證明系統(tǒng)中運(yùn)行的進(jìn)程正在不斷地消耗物理內(nèi)存。
            已經(jīng)使用的虛擬內(nèi)存(swpd)不斷增加,而且存在著大量的頁面交換(si和so),證明物理內(nèi)存已經(jīng)不能滿足系統(tǒng)需求,系統(tǒng)必須把物理內(nèi)存的頁面交換到磁盤中去。
            由此可以得到這樣的結(jié)論:該主機(jī)上的物理內(nèi)存已經(jīng)不能滿足系統(tǒng)運(yùn)行的需要,內(nèi)存已成為該系統(tǒng)性能的一個(gè)瓶頸。
            ps:對于java程序,內(nèi)存瓶頸可以通過heap dump后使用mat分析
            磁盤瓶頸:
            iostat查看IO信息。如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。
            另外還需要注意iowait這個(gè)值,iowait 值高就意味著磁盤緩慢或負(fù)載過大。還有不要信任svctm這個(gè)字段。
            監(jiān)控swap 和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸.
            ps:磁盤瓶頸可以通過pidstat -d 定位程序
            2.如何理解CPU、內(nèi)存、磁盤的關(guān)系?
            這些子系統(tǒng)之間關(guān)系是彼此聯(lián)系,相互彼此依賴的
            1.對于進(jìn)程來說,數(shù)據(jù)是存放在內(nèi)存中的,進(jìn)程的運(yùn)行需要使用CPU,進(jìn)程讀寫數(shù)據(jù)需要跟磁盤打交道。
            2.當(dāng)內(nèi)存不足時(shí)需要跟磁盤進(jìn)行頁(page)交換,swap交換,從而產(chǎn)生磁盤IO。po,so釋放物理內(nèi)存,pi,si增加物理內(nèi)存使用。交換分頁的過程需要占用cpu時(shí)間。 (內(nèi)存占用過高)
            3.當(dāng)磁盤IO負(fù)載過高時(shí),需要監(jiān)控swap和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸。磁盤的相當(dāng)慢的,當(dāng)iowait 增長,表示CPU花費(fèi)大量的時(shí)間在等待磁盤IO,此時(shí)CPU Bound的應(yīng)用處理將受到影響(磁盤IO過高)
            3.如何理解paging in / paging out ?
            在Linux內(nèi)存管理中,主要是通過“調(diào)頁P(yáng)aging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動(dòng)頁面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個(gè)進(jìn)程,而不是部分頁面,全部交換到磁盤上。
            分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當(dāng)內(nèi)核需要一個(gè)分頁時(shí),但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁錯(cuò)誤(Page Fault)。
            當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會(huì)通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁的時(shí)間超過運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會(huì)急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。
            可以通過vmstat -s 查看 paged in/out 數(shù)量
            4.如何監(jiān)控操作系統(tǒng)的資源?(可用一個(gè)操作系統(tǒng)做例子)
            (把簡歷上部分內(nèi)容直接貼出來了,懶的整理了)
            CPU監(jiān)控:top(利用率), uptime(運(yùn)行隊(duì)列數(shù)), vmstat(上下文切換數(shù)), jprofile(方法占用cpu時(shí)間百分比)
            內(nèi)存監(jiān)控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看對象)
            磁盤監(jiān)控:iostat(%util), top(iowait%), pidstat -d
            網(wǎng)絡(luò)監(jiān)控:netstat(連接數(shù)), nethogs(流量), wireshark和tcpdump(抓包)
            JVM監(jiān)控:jstat(gc), jmap(堆dump), jstack(線程dump), jprofiler和visualvm(剖析工具)
            nmon(長時(shí)間全局收集數(shù)據(jù))
            5.如何理解內(nèi)存管理和線程調(diào)度?(可用一個(gè)操作系統(tǒng)做例子)
            不會(huì)
            6.如何理解上下文切換(context switch)?(可用一個(gè)操作系統(tǒng)做例子)
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            vmstat其中cs那一列
            7.如何理解磁盤IO?(可用一個(gè)操作系統(tǒng)做例子)
            磁盤IO速度是非常慢的,linux內(nèi)核就是要盡量降低IO
            內(nèi)存不足時(shí)會(huì)進(jìn)行頁交換,產(chǎn)生磁盤IO
            CPU Bound類型應(yīng)用,當(dāng)磁盤IO過多,iowait過大時(shí)會(huì)影響性能。
           操作系統(tǒng)
            1.如何判斷CPU、內(nèi)存、磁盤的瓶頸?
            CPU瓶頸:
            1) 查看CPU利用率。建議CPU指標(biāo)如下
            a) User Time:65%~70%
            b) System Time:30%~35%
            c) Idle:0%~5%
            如果us,sy高于這個(gè)指標(biāo)可以判斷CPU有瓶頸
            使用top查看
            查看運(yùn)行隊(duì)列
            每個(gè)CPU都會(huì)維持一個(gè)運(yùn)行隊(duì)列,理想情況下,調(diào)度器會(huì)不斷讓隊(duì)列中的進(jìn)程運(yùn)行。進(jìn)程不是處在sleep狀態(tài)就是run able狀態(tài)。如果CPU過載,就會(huì)出現(xiàn)調(diào)度器跟不上系統(tǒng)的要求,導(dǎo)致可運(yùn)行的進(jìn)程會(huì)填滿隊(duì)列。隊(duì)列愈大,程序執(zhí)行時(shí)間就愈長。“load”用來表示運(yùn)行隊(duì)列,用top 命令我們可以看到CPU一分鐘,5分鐘和15分鐘內(nèi)的運(yùn)行隊(duì)列的大小。這個(gè)值越大表明系統(tǒng)負(fù)荷越大。超過 1.00,那么說明CPU已經(jīng)超出負(fù)荷,交通嚴(yán)重的擁堵。
            使用top或者uptime查看
            查看上下文切換
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            使用vmstat查看cs
            結(jié)論:
            檢查system的運(yùn)行隊(duì)列,以及確定不要超出每個(gè)處理器3個(gè)可運(yùn)行狀態(tài)線程的限制.
            確定CPU 利用率中user/system比例維持在70/30
            當(dāng)CPU 開銷更多的時(shí)間在system mode,那就說明已經(jīng)超負(fù)荷并且應(yīng)該嘗試重新調(diào)度優(yōu)先級(jí)
            當(dāng)I/O 處理得到增長,CPU 范疇的應(yīng)用處理將受到影響
            ps:對于JAVA應(yīng)用,CPU瓶頸可以通過jprofiler監(jiān)控分析
            內(nèi)存瓶頸:
            1.查看利用率(free)
            used:已使用多大。
            free:可用有多少。
            Shared:多個(gè)進(jìn)程共享的內(nèi)存總額。
            Buffers/cached:磁盤緩存的大小。
            2.查看頁交換,swap交換(po,pi,so,si),磁盤IO(vmstat)
            si: 每秒從交換區(qū)寫到內(nèi)存的大小
            so: 每秒寫入交換區(qū)的內(nèi)存大小
            page in :分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In
            page out : 分頁(Page)寫入磁盤的過程被稱作Page-Out
            另外在進(jìn)行頁交換的時(shí)候,會(huì)產(chǎn)生磁盤IO,還需注意bi,bo
            Bo 磁盤塊頁面從內(nèi)存到文件或交換設(shè)備的總額
            Bi 磁盤塊頁面從文件或交換設(shè)備到內(nèi)存的總額
            3.page fault(pidstat -r,sar -B )
            minflt/s: 每秒次缺頁錯(cuò)誤次數(shù)(minor page faults),次缺頁錯(cuò)誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)
            majflt/s: 每秒主缺頁錯(cuò)誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生
            其中sar -B中fault/s表示每秒鐘minflt,majflt的和。
            結(jié)論:
            監(jiān)控虛擬內(nèi)存性能由以下幾個(gè)部分組成:
            1.當(dāng)系統(tǒng)中出現(xiàn)較少的頁錯(cuò)誤,獲得最好的響應(yīng)時(shí)間,是因?yàn)閙emory caches(譯注:內(nèi)存高速緩存)比disk caches更快(譯注:磁盤高速緩存).
            2.較少的空閑內(nèi)存,是件好事情,那意味著緩存的使用更有效率.除非在不斷的寫入swap device和disk.
            3.如果系統(tǒng)不斷報(bào)告,swap device總是繁忙中,那就意味著內(nèi)存已經(jīng)不足,需要升級(jí)了.
            zee:
            如果用做緩沖區(qū)(buff)和快速緩存(Cache)的物理內(nèi)存不斷地增加,而空閑的物理內(nèi)存(free)不斷地減少,證明系統(tǒng)中運(yùn)行的進(jìn)程正在不斷地消耗物理內(nèi)存。
            已經(jīng)使用的虛擬內(nèi)存(swpd)不斷增加,而且存在著大量的頁面交換(si和so),證明物理內(nèi)存已經(jīng)不能滿足系統(tǒng)需求,系統(tǒng)必須把物理內(nèi)存的頁面交換到磁盤中去。
            由此可以得到這樣的結(jié)論:該主機(jī)上的物理內(nèi)存已經(jīng)不能滿足系統(tǒng)運(yùn)行的需要,內(nèi)存已成為該系統(tǒng)性能的一個(gè)瓶頸。
            ps:對于java程序,內(nèi)存瓶頸可以通過heap dump后使用mat分析
            磁盤瓶頸:
            iostat查看IO信息。如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。
            另外還需要注意iowait這個(gè)值,iowait 值高就意味著磁盤緩慢或負(fù)載過大。還有不要信任svctm這個(gè)字段。
            監(jiān)控swap 和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸.
            ps:磁盤瓶頸可以通過pidstat -d 定位程序
            2.如何理解CPU、內(nèi)存、磁盤的關(guān)系?
            這些子系統(tǒng)之間關(guān)系是彼此聯(lián)系,相互彼此依賴的
            1.對于進(jìn)程來說,數(shù)據(jù)是存放在內(nèi)存中的,進(jìn)程的運(yùn)行需要使用CPU,進(jìn)程讀寫數(shù)據(jù)需要跟磁盤打交道。
            2.當(dāng)內(nèi)存不足時(shí)需要跟磁盤進(jìn)行頁(page)交換,swap交換,從而產(chǎn)生磁盤IO。po,so釋放物理內(nèi)存,pi,si增加物理內(nèi)存使用。交換分頁的過程需要占用cpu時(shí)間。 (內(nèi)存占用過高)
            3.當(dāng)磁盤IO負(fù)載過高時(shí),需要監(jiān)控swap和系統(tǒng)分區(qū),要確保virtual memory不是文件系統(tǒng)I/O 的瓶頸。磁盤的相當(dāng)慢的,當(dāng)iowait 增長,表示CPU花費(fèi)大量的時(shí)間在等待磁盤IO,此時(shí)CPU Bound的應(yīng)用處理將受到影響(磁盤IO過高)
            3.如何理解paging in / paging out ?
            在Linux內(nèi)存管理中,主要是通過“調(diào)頁P(yáng)aging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動(dòng)頁面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個(gè)進(jìn)程,而不是部分頁面,全部交換到磁盤上。
            分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當(dāng)內(nèi)核需要一個(gè)分頁時(shí),但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁錯(cuò)誤(Page Fault)。
            當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會(huì)通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁的時(shí)間超過運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會(huì)急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。
            可以通過vmstat -s 查看 paged in/out 數(shù)量
            4.如何監(jiān)控操作系統(tǒng)的資源?(可用一個(gè)操作系統(tǒng)做例子)
            (把簡歷上部分內(nèi)容直接貼出來了,懶的整理了)
            CPU監(jiān)控:top(利用率), uptime(運(yùn)行隊(duì)列數(shù)), vmstat(上下文切換數(shù)), jprofile(方法占用cpu時(shí)間百分比)
            內(nèi)存監(jiān)控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看對象)
            磁盤監(jiān)控:iostat(%util), top(iowait%), pidstat -d
            網(wǎng)絡(luò)監(jiān)控:netstat(連接數(shù)), nethogs(流量), wireshark和tcpdump(抓包)
            JVM監(jiān)控:jstat(gc), jmap(堆dump), jstack(線程dump), jprofiler和visualvm(剖析工具)
            nmon(長時(shí)間全局收集數(shù)據(jù))
            5.如何理解內(nèi)存管理和線程調(diào)度?(可用一個(gè)操作系統(tǒng)做例子)
            不會(huì)
            6.如何理解上下文切換(context switch)?(可用一個(gè)操作系統(tǒng)做例子)
            每個(gè)CPU(或多核CPU中每個(gè)核心)在同一時(shí)間只能執(zhí)行一個(gè)線程,Linux采用搶占式調(diào)度。即為每個(gè)線程分配一定的執(zhí)行時(shí)間,當(dāng)?shù)竭_(dá)執(zhí)行時(shí)間,線程中有IO阻塞或高優(yōu)先級(jí)線程要執(zhí)行時(shí),Linux將切換執(zhí)行的線程,在切換時(shí)要存儲(chǔ)目前線程的執(zhí)行狀態(tài),并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過程稱之為上下文切換。對于java應(yīng)用,典型的是在進(jìn)行文件IO操作,網(wǎng)絡(luò)IO操作,鎖等待或線程sleep時(shí),當(dāng)前線程會(huì)進(jìn)入阻塞或者休眠狀態(tài),從而觸發(fā)上下文切換,上下文切換過多會(huì)造成內(nèi)核占用過多的CPU使用,使得應(yīng)用的響應(yīng)速度下降。
            vmstat其中cs那一列
            7.如何理解磁盤IO?(可用一個(gè)操作系統(tǒng)做例子)
            磁盤IO速度是非常慢的,linux內(nèi)核就是要盡量降低IO
            內(nèi)存不足時(shí)會(huì)進(jìn)行頁交換,產(chǎn)生磁盤IO
            CPU Bound類型應(yīng)用,當(dāng)磁盤IO過多,iowait過大時(shí)會(huì)影響性能。

          posted on 2014-08-22 09:41 順其自然EVO 閱讀(607) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄性能測試

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 开远市| 西青区| 水富县| 文山县| 徐汇区| 高清| 康乐县| 芜湖市| 谢通门县| 山西省| 宜兰市| 孙吴县| 巴东县| 天峻县| 瓮安县| 靖边县| 越西县| 东平县| 洞头县| 阳谷县| 辽宁省| 江西省| 平遥县| 香港| 永城市| 扶余县| 三河市| 盐源县| 青浦区| 日喀则市| 齐河县| 虎林市| 双柏县| 绥棱县| 韶关市| 星座| 呼玛县| 鸡东县| 沂源县| 清丰县| 宾阳县|