百家互聯網QA面試題--性能

1、基礎概念:HPS、TPS、QPS、RPS、RT、併發用戶數概念?簡要介紹?

HPS(Hits Per Second):每秒點擊次數,單位是次/秒。
TPS(Transaction per Second):系統每秒處理事務數,簡稱TPS, 每秒事務數, 是衡量系統性能的一個非常重要的指標。
QPS(Query per Second):系統每秒處理查詢次數,單位是次/秒。對於互聯網業務中,如果某些業務有且僅有一個請求連接,那麼TPS=QPS=HPS,一般情況下用TPS來衡量整個業務流程,用QPS來衡量接口查詢次數,用HPS來表示對服務器點擊請求
RPS 即每秒請求數(Request Per Second),通常用來描述施壓引擎實際發出的壓力大小。PS:併發數過低時可能達不到預期的 RPS,併發數過高時可能壓力過大壓垮服務器
併發用戶數:簡稱VU ,指的是現實系統中操作業務的用戶,在性能測試工具中,一般稱爲虛擬用戶數(Virutal User),注意併發用戶數跟註冊用戶數、在線用戶數有很大差別的,併發用戶數一定會對服務器產生壓力的,而在線用戶數只是 ”掛” 在系統上,對服務器不產生壓力,註冊用戶數一般指的是數據庫中存在的用戶數。
響應時間:簡稱RT,指的是業務從客戶端發起到客戶端接受的時間。

2、壓測工具?你主要看哪些指標?

答:jmeter:
Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值
#Samples:表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那麼這裏顯示100
Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 爲單位顯示平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Note:關於 50% 和 90% 併發用戶數的含義,請參考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec

3、性能測試中TPS上不去的幾種原因淺析?

TPS(Transaction Per Second):每秒事務數,指服務器在單位時間內(秒)可以處理的事務數量,一般以request/second爲單位。
a、網絡帶寬 在壓力測試中,有時候要模擬大量的用戶請求,如果單位時間內傳遞的數據包過大,超過了帶寬的傳輸能力,那麼就會造成網絡資源競爭,間接導致服務端接收到的請求數達不到服務端的處理能力上限。
b、連接池
可用的連接數太少,造成請求等待。連接池一般分爲服務器連接池(比如Tomcat)和數據庫連接池(或者理解爲最大允許連接數也行)。
c、垃圾回收機制
從常見的應用服務器來說,比如Tomcat,因爲java的的堆棧內存是動態分配,具體的回收機制是基於算法,如果新生代的Eden和Survivor區頻繁的進行Minor GC,老年代的full GC也回收較頻繁,那麼對TPS也是有一定影響的,因爲垃圾回收其本身就會佔用一定的資源。
d、數據庫配置
高併發情況下,如果請求數據需要寫入數據庫,且需要寫入多個表的時候,如果數據庫的最大連接數不夠,或者寫入數據的SQL沒有索引沒有綁定變量,抑或沒有主從分離、讀寫分離等,就會導致數據庫事務處理過慢,影響到TPS。
e、通信連接機制
串行、並行、長連接、管道連接等,不同的連接情況,也間接的會對TPS造成影響。
f、硬件資源
包括CPU(配置、使用率等)、內存(佔用率等)、磁盤(I/O、頁交換等)。
g、壓力機
比如jmeter,單機負載能力有限,如果需要模擬的用戶請求數超過其負載極限,也會間接影響TPS(這個時候就需要進行分佈式壓測來解決其單機負載的問題)。
h、壓測腳本
還是以jemter舉個例子,之前工作中同事遇到的,進行階梯式加壓測試,最大的模擬請求數超過了設置的線程數,導致線程不足。
提到這個原因,想表達意思是:有時候測試腳本參數配置等原因,也會影響測試結果。
i、業務邏輯
業務解耦度較低,較爲複雜,整個事務處理線被拉長導致的問題。
j、系統架構
比如是否有緩存服務,緩存服務器配置,緩存命中率、緩存穿透以及緩存過期等,都會影響到測試結果。

4、性能測試工具瞭解幾個?壓測結果區別?

A,ab,是apache自帶的壓力測試工具
B,Jmeter 基於Java的壓力測試工具
c,Locust是一個Python編寫的分佈式的性能測試工具

5、性能測試策略?

做性能測試需要一套標準化流程及測試策略。在做負載測試的時候,傳統方式一般都是按照梯度施壓的方式去加用戶數,避免在沒有預估的情況下,一次加幾萬個用戶,導致交易失敗率非常高,響應時間非常長,已經超過了使用者忍受範圍內;較爲適合互聯網分佈式架構的方式,是用TPS模式(吞吐量模式)+設置起始和目標最大量級,然後根據系統表現靈活的手工實時調速,效率更高,服務端吞吐能力的衡量一步到位。

6、性能測試場景設置思路?

無論併發模式還是TPS模式,場景就是一個壓測模型,壓測模型中有串行的事務(如添加購物車+購物車下單+付款)也有並行的接口(在不同串聯鏈路中的壓測API),最終組成一個複雜或者簡單的場景。然後根據新業務上線的目標、或者日常峯值的等比例目標、或者重大業務活動的預估支撐能力去設置每個API的目標能力(TPS是一步到位的按照吞吐能力設置的,推薦TPS模式,比如前面提到的添加購物車+購物車下單+付款這種流程就是一個漏斗模型,TPS設置爲逐漸變小的模型即可),當然也可以在初期的測試中更謹慎一點,將目標量級設置得整體低一點,當最終能力達到之後建議可以調整原定目標量級到120%或者150%,驗證限流准入/高可用基礎設施的抗壓能力。目標量級即當前壓測場景中這個壓測API的施壓上限。而起步量級可以從5%或者10%開始,過程中視業務指標數據和被壓測端的整體負載臨時調整。

7、對服務器性能測試的看法?

針對服務器端的性能,以TPS爲主來衡量系統的性能,併發用戶數爲輔來衡量系統的性能,如果必須要用併發用戶數來衡量的話,需要一個前提,那就是交易在多長時間內完成,因爲在系統負載不高的情況下,將思考時間(思考時間的值等於交易響應時間)加到串聯鏈路(場景)中,併發用戶數基本可以增加一倍,因此用併發用戶數來衡量系統的性能沒太大的意義。同樣的,如果系統間的吞吐能力差別很大,那麼同樣的併發下TPS差距也會很大。

8、系統的性能決定的要素?跟併發用戶數的關係?

由TPS決定,跟併發用戶數沒有多大關係。
系統的最大TPS是一定的(在一個範圍內),但併發用戶數不一定,可以調整。
建議性能測試的時候,不要設置過長的思考時間,以最壞的情況下對服務器施壓。

9、Jmeter的工作原理是什麼?

jmeter可以作爲web服務器與瀏覽器直接的代理網關,以便捕獲瀏覽器的請求和web服務器的響應,如此就可以很容易地生成性能測試腳本。有了性能測試腳本,jmeter就可以通過線程來模擬真實用戶對web服務器的訪問壓力。這與LoadRunner的工作原理基本一致。

10、你常用的元件、各自的作用是什麼?

1.測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
2.線程組(Thread Group)代表一定數量的併發用戶,它可以用來模擬併發用戶發送請求。
3.取樣器(sampler)定義實際的請求內容,被線程組包含,我們主要用HTTP請求。
4.監聽器(Listener)
5.邏輯控制器(Logic Controller)
6.斷言(Assertions)
7.配置元件(Config Element)
8.前置處理器(Pre Processors)和後置處理器(Post Processors)
9.定時器(Timer)

11、前端的性能應該從哪些方面去測試?應該關注哪些指標?
1、使用的一些工具
2、查看靜態資源
3、JS、CSS等資源加載速度
4、頁面渲染
5、不同瀏覽器上加載速度
12、常用的開源性能測試工具有哪些?(追問)

比如:Ngrinder、Locust、Wrk、Artillery等;

13、負載均衡原理、實現方式

1)http重定向協議實現負載均衡
原理:根據用戶的http請求計算出一個真實的web服務器地址,並將該web服務器地址寫入http重定向響應中返回給瀏覽器,由瀏覽器重新進行訪問。
2)dns域名解析負載均衡
原理:在DNS服務器上配置多個域名對應IP的記錄。例如一個域名www.baidu.com對應一組web服務器IP地址,域名解析時經過DNS服務器的算法將一個域名請求分配到合適的真實服務器上。
3)反向代理負載均衡(Nginx)
原理:反向代理處於web服務器這邊,反向代理服務器提供負載均衡的功能,同時管理一組web服務器,它根據負載均衡算法將請求的瀏覽器訪問轉發到不同的web服務器處理,處理結果經過反向服務器返回給瀏覽器。
4)IP負載均衡
原理:在網絡層通過修改目標地址進行負載均衡。
5)數據鏈路層負載均衡
原理:在數據鏈路層修改Mac地址進行負載均衡。

14、什麼是緩存?

緩存就是在內存中存儲的數據備份,當數據沒有發生本質變化的時候,我們避免數據的查詢操作直接連接數據庫,而是去 內容中讀取數據,這樣就大大降低了數據庫的讀寫次數,而且從內存中讀數據的速度要比從數據庫查詢要快很多。

15、什麼是Redis?

1)Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2)Redis支持master-slave(主-從)模式應用
3)Redis支持數據持久化,可以將內存中的數據保持在磁盤中,重啓的時候可以再次加載進行使用。
4)Redis單個value的最大限制是1GB,memcached只能保存1MB的數據。

16、什麼是全鏈路壓測?

基於實際的生產業務場景、系統環境,模擬海量的用戶請求和數據對整個業務鏈進行壓力測試,並持續調優的過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章