qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          碼農的性能測試

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

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 万载县| 铅山县| 怀来县| 万源市| 周口市| 锦屏县| 濉溪县| 筠连县| 吴江市| 和田县| 托克托县| 内丘县| 于都县| 丽水市| 江西省| 万安县| 康平县| 平顶山市| 六安市| 福州市| 霸州市| 台东市| 玛多县| 普定县| 舟山市| 合水县| 温州市| 道孚县| 图片| 潍坊市| 阿图什市| 昌图县| 祁东县| 申扎县| 台湾省| 屏南县| 祁门县| 江都市| 富阳市| 黎城县| 大洼县|