扯淡
首先說明這篇博客是文不對題的。起這個名字想法來源自韓寒的《我所理解的生活》,之前看過一個關于這本書的視頻,感覺巨牛X,于是就想寫一篇《我所理解的性能測試》。雖然是文不對題的,但我就是想用這個名字,在這個殘忍的社會,給自己博客文章起個名字這點權利還是有的。
下面我要貼出來的是zee大神的《性能測試面試問題列表》中列出來的性能測試與操作系統方面問題與我自己整理的回答?;卮鸬牟灰欢▽?,也懶得去改了。就用這些問題與回答來記錄我這段時間的努力,來記錄我所理解的性能測試吧。
性能測試
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
原文轉自:http://www.neversaydie.cc/the-performance-test-what-i-understand/