碼農(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í)專欄 、性能測試