關(guān)于性能測試御吞,這些你需要知道

性能測試是什么?

  • 性能測試:指通過自動化的測試工具模擬多種正常麦箍、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試。

性能要求

  • 用戶
    • 響應(yīng)速度
    • 穩(wěn)定性
  • 開發(fā)
    • 架構(gòu)是否合理
    • 數(shù)據(jù)庫設(shè)計
    • 代碼
  • 系統(tǒng)管理員
    • 資源利用率(合適的比例)
    • 可擴展性
    • 系統(tǒng)容量(可容納的用戶請求)
    • 穩(wěn)定性

性能測試應(yīng)用場景

  • 能力驗證 關(guān)注在給定的軟硬件條件下陶珠,系統(tǒng)能否具有預(yù)期的能力表現(xiàn)
  • 規(guī)劃能力 關(guān)注如何使系統(tǒng)具有我們要求的性能能力
  • 性能調(diào)優(yōu) 主要用于對系統(tǒng)性能進(jìn)行調(diào)優(yōu)
  • 缺陷發(fā)現(xiàn) 發(fā)現(xiàn)缺陷或問題重現(xiàn)挟裂、定位手段
  • 性能基準(zhǔn)比較 比較每次迭代中的性能表現(xiàn)變化,判斷迭代是否達(dá)到了目標(biāo)

性能測試類型

  • 基準(zhǔn)測試:在給系統(tǒng)施加較低壓力時揍诽,查看系統(tǒng)的運行狀況并記錄相關(guān)數(shù)做為基礎(chǔ)參考诀蓉。
  • 并發(fā)測試:測試多個用戶同時訪問同一個應(yīng)用、同一個模塊或者數(shù)據(jù)記錄時是否存在死鎖或者其他性能問題暑脆。
  • 負(fù)載測試:是指對系統(tǒng)不斷地增加壓力或增加一定壓力下的持續(xù)時間渠啤,直到系統(tǒng)的某項或多項性能指標(biāo)達(dá)到安全臨界值,例如某種資源已經(jīng)達(dá)到飽和狀態(tài)等添吗。
  • 壓力測試:壓力測試是評估系統(tǒng)處于或超過預(yù)期負(fù)載時系統(tǒng)的運行情況沥曹,關(guān)注點在于系統(tǒng)在峰值負(fù)載或超出最大載荷情況下的處理能力。
  • 穩(wěn)定性測試:在給系統(tǒng)加載一定業(yè)務(wù)壓力的情況下碟联,使系統(tǒng)運行一段時間妓美,以此檢測系統(tǒng)是否穩(wěn)定。

性能測試基本概念

  • 并發(fā)數(shù)
    • 并發(fā)用戶數(shù):某一物理時刻同時向系統(tǒng)提交請求的用戶數(shù)鲤孵,提交的請求可能是同一個場景或功能壶栋,也可以是不同場景或功能。
    • 在線用戶數(shù):某段時間內(nèi)訪問系統(tǒng)的用戶數(shù)普监,這些用戶并不一定同時向系統(tǒng)提交請求
    • 系統(tǒng)用戶數(shù):系統(tǒng)注冊的總用戶數(shù)據(jù)
  • 吞吐量(TPS) : 單位時間內(nèi)系統(tǒng)處理的客戶端請求的數(shù)量(完成一個業(yè)務(wù)事務(wù)的過程)
  • 響應(yīng)時間 :從用戶發(fā)送一個請求到用戶接收到服務(wù)器返回的響應(yīng)數(shù)據(jù)這段時間就是響應(yīng)時間
  • 資源利用率 :指的是對不同系統(tǒng)資源的使用程度贵试,通常以占用最大值的百分比來衡量
    • CPU:就像人的大腦丧没,主要負(fù)責(zé)相關(guān)事情的判斷以及實際處理的機制
    • 內(nèi)存:大腦中的記憶塊區(qū),將眼睛锡移,皮膚等收集到的信息記錄起來的地方,以供cpu進(jìn)行判斷漆际,但是是臨時的淆珊,訪問速度快,如果關(guān)機或斷電這里的數(shù)據(jù)會消失奸汇。
    • 磁盤IO:大腦中的記憶區(qū)塊施符,將重要的數(shù)據(jù)保存起來(永久保存,關(guān)機或斷電不會丟失擂找,速度慢)戳吝,以便將來再次使用這些數(shù)據(jù)。
    • 網(wǎng)絡(luò):

模擬用戶的真實贯涎、峰值和異常的請求量(單位時間的請求數(shù)量*單位請求內(nèi)容大刑蕖)去訪問系統(tǒng),監(jiān)控其性能情況(TPS塘雳、響應(yīng)時間和資源利用率)并獲取陆盘。

需要準(zhǔn)備什么?

環(huán)境選擇:與線上保持一致

系統(tǒng)環(huán)境

  • 線上或者uat環(huán)境
    • 數(shù)據(jù)請求打標(biāo)簽,區(qū)分測試數(shù)據(jù)與真實數(shù)據(jù)
    • 增加測試擋板
    • 優(yōu)點:不需要搭建環(huán)境和監(jiān)控
    • 缺點:只能選擇流量空閑期,不能進(jìn)行過高的壓測,測試時候要及時跟開發(fā)溝通(線上異常警告)
  • 搭建環(huán)境
    • 組網(wǎng)模型: 需要評估測試組網(wǎng)與生產(chǎn)組網(wǎng)差異败明,至少滿足最低配置要求
      • 組網(wǎng)類型:單機/雙機/單機集群/雙機集群/各種組合類型
      • 硬件: cpu/內(nèi)存/磁盤讀寫/網(wǎng)卡
      • 軟件:操作系統(tǒng)類型/服務(wù)/數(shù)據(jù)庫/文件庫/第三方組件
      • 消息交互:同步/異步
    • 數(shù)據(jù)模型
      • 系統(tǒng)初始數(shù)據(jù):
        • 分析系統(tǒng)上線后數(shù)據(jù)量/歷史數(shù)據(jù)
        • 計算出系統(tǒng)每個階段數(shù)據(jù)容量隘马,數(shù)據(jù)類型,數(shù)據(jù)比例
        • 根據(jù)不同階段分別進(jìn)行數(shù)據(jù)預(yù)制
      • 測試新增數(shù)據(jù):
        • 業(yè)務(wù)場景確定后根據(jù)具體業(yè)務(wù)場景定義輸入和輸出數(shù)據(jù)
        • 結(jié)合具體的呼叫模型進(jìn)行數(shù)據(jù)預(yù)制

執(zhí)行機環(huán)境

  • 網(wǎng)絡(luò)與用戶保持一致
  • 組網(wǎng):單機(4U8G)一般只能支持2000tps左右)妻顶,場景超過需要更高的配置
  • 調(diào)優(yōu)
    • 網(wǎng)絡(luò)設(shè)置
    • 測試軟件
    • 系統(tǒng)對軟件的限制

測試工具 :與開發(fā)技術(shù)棧一致

  • ApacheBench: Apache 服務(wù)器自帶的一個web壓力測試工具酸员,簡稱ab
  • Wrk:一款針對 Http 協(xié)議的基準(zhǔn)測試開源工具,支持lua腳本
  • Apache JMeter(常用): Java 編寫的應(yīng)用程序,支持插件和jar包.
  • Locust:一個開源負(fù)載測試工具讳嘱。使用 Python 代碼定義用戶行為幔嗦,也可以仿真百萬個用戶。
  • LoadRunner(付費專業(yè)):HP公司提供的一款性能測試工具沥潭,通過模擬成千上萬個用戶實施并發(fā)操作崭添,測試系統(tǒng)的性能,并且提供詳細(xì)的測試結(jié)果分析叛氨,協(xié)助用戶查找問題呼渣。
  • Spirent(付費專業(yè)):自帶硬件的大流量網(wǎng)絡(luò)測試儀

監(jiān)控軟件

  • Linux系統(tǒng)監(jiān)控工具
  • Node_Exporter+Prometheus+Grafana

場景建模

出發(fā)點

  • 界面反應(yīng)慢
  • 界面卡頓甚至無響應(yīng)
  • 請求超時
  • 使用過程中程序閃退
  • 高峰時期程序報錯

需要考慮的問題

  • 模擬與真實場景、真實組網(wǎng)和真實數(shù)據(jù)之間的差異性
  • 測試過程中的執(zhí)行模型問題(緩存)
  • 測試執(zhí)行過程中的資源監(jiān)控問題
  • 行業(yè)或者同行標(biāo)準(zhǔn)
    否則結(jié)果與現(xiàn)實存在很大差距寞埠,測試結(jié)果不準(zhǔn)確

場景選取

  • 分析用戶使用場景屁置,掌握用戶需求(秒殺或者持續(xù)請求)
  • 提煉用戶關(guān)注度較強的功能
  • 分析用戶操作頻繁的功能
  • 分析系統(tǒng)中可能的大數(shù)據(jù)量操作【文件讀寫,圖片瀏覽仁连,事務(wù)隊列蓝角,事務(wù)機制】
  • 分析系統(tǒng)關(guān)鍵功能【后臺服務(wù)阱穗,緩存,調(diào)用的功能組件】
  • 分析用戶組合航警使鹅,操作比例以及操作時延

執(zhí)行模型

  • 壓力測試
  • 負(fù)載測試
  • 性能測試

測試過程中有哪些內(nèi)容揪阶?

系統(tǒng)瓶頸分析

整體思路:從前到后,從表象到內(nèi)部

  1. 首先排除壓力機自身的問題患朱,如CPU鲁僚、內(nèi)存,網(wǎng)絡(luò)裁厅,腳本編寫等
  2. 監(jiān)控中間件的訪問日志冰沙,觀察響應(yīng)時間,大體確定耗時處于哪一段
  3. 排查網(wǎng)絡(luò)問題执虹,監(jiān)控壓力機到后端服務(wù)器的網(wǎng)絡(luò)拓挥,以及各服務(wù)器間的網(wǎng)絡(luò),是否達(dá)到網(wǎng)絡(luò)上限
  4. 監(jiān)控服務(wù)端所有機器的操作系統(tǒng)負(fù)載袋励,如CPU侥啤、內(nèi)存、磁盤茬故、網(wǎng)絡(luò)是否達(dá)到瓶頸
  5. 監(jiān)控應(yīng)用服務(wù)器的日志愿棋,查看是否存在ERROR日志,比如TimeOut或其他類型報錯
  6. 監(jiān)控各中間件的連接數(shù)均牢,如nginx糠雨、tomcat、mysql等徘跪,是否達(dá)到上限
  7. 監(jiān)控應(yīng)用程序線程狀態(tài)甘邀,使用jstack或jvisualvm查看是否有死鎖、阻塞等情況
  8. 監(jiān)控應(yīng)用程序的jvm垮庐,使用jstat或者jmap查看GC情況松邪,是否內(nèi)存泄漏等
  9. 使用jprofiler監(jiān)控應(yīng)用程序,可以查看耗時比較長的代碼方法
  10. 監(jiān)控數(shù)據(jù)庫哨查,是否存在慢查詢逗抑,一般數(shù)據(jù)庫CPU高都是因為SQL語句效率低造成的
    • 在sql語句前加上explain,可以分析這條sql語句的執(zhí)行情況 explain select * from teacher
      • Type列可能的值
        Const:表中只有一個匹配行寒亥,用到primary key或unique key
        Eq_ref:唯一性索引掃描邮府,key的所有部分被連接聯(lián)接查詢使用,且key是unique或primary key
        ref:非唯一性索引掃描溉奕,或只使用了聯(lián)合索引的最左前綴
        Range:索引范圍掃描褂傀,在索引列上進(jìn)行給定范圍內(nèi)的檢索,如between加勤,in(1,100)
        Index:遍歷索引...
        All:全表掃描
        Prossible key:使用哪個索引能找到行
        Keys:sql語句使用的索引
        rows:mysql 根據(jù)索引選擇情況仙辟,估算查找數(shù)據(jù)所需讀取的行數(shù)
    • 聯(lián)合索引
    • 連接數(shù)
    • 數(shù)據(jù)庫架構(gòu)優(yōu)化
      • 讀寫分離同波,主從配置
      • 硬件調(diào)優(yōu)
  11. 檢查數(shù)據(jù)庫執(zhí)行計劃,是否有全表掃描叠国,以及索引不生效的情況
  12. 檢查系統(tǒng)外部依賴情況未檩,如果外部依賴系統(tǒng)性能差,也會造成本系統(tǒng)性能低
  13. 對于不好定位的問題粟焊,可以考慮采用模塊隔離法來確定問題

優(yōu)化方案

  • sql
    1. 在 where 及 order by 涉及的列上建立索引冤狡,避免全表掃描,索引不要太多吆玖,一個表一般不要
      超過4個索引
    2. 避免在 where 子句中對字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
    3. 查詢語句中不要使用 *马篮,減少內(nèi)存使用
    4. 盡量減少子查詢沾乘,使用關(guān)聯(lián)查詢(left join,right join,inner join)替代
    5. 減少使用IN或者NOT IN ,使用exists,not exists或者關(guān)聯(lián)查詢語句替代
    6. or 的查詢盡量用 union或者union all 代替(在確認(rèn)沒有重復(fù)數(shù)據(jù)或者不用剔除重復(fù)數(shù)據(jù)時浑测,
      union all會更好)
    7. 合理的增加冗余的字段(減少表的聯(lián)接查詢)
    8. 建表的時候能使用數(shù)字類型的字段就使用數(shù)字類型(type,status...)翅阵,數(shù)字類型的字段作為條件查詢比字符串的快
  • 代碼
    1. 使用對象池減少對重復(fù)對象的創(chuàng)建;
    2. 調(diào)整對后端的連接
    3. 增加本地緩存
    4. 如果不涉及事務(wù)的情況下迁央,考慮使用Nosql進(jìn)行存儲
    5. 一次請求合并多次操作
    6. 由串行修改為并行操作
    7. 同步修改為異步

測試注意點

  • 記錄性能指標(biāo)(數(shù)值和圖片)
  • 監(jiān)控請求是否正常,分析失敗原因
  • 測試總體曲線是否呈現(xiàn)波峰或者隨著請求量增大趨于水平

測試報告

  • 測試場景
  • 結(jié)果與分析
  • 結(jié)論
  • 風(fēng)險點
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掷匠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岖圈,更是在濱河造成了極大的恐慌讹语,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜂科,死亡現(xiàn)場離奇詭異顽决,居然都是意外死亡,警方通過查閱死者的電腦和手機导匣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門才菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贡定,你說我怎么就攤上這事赋访。” “怎么了缓待?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵蚓耽,是天一觀的道長。 經(jīng)常有香客問我旋炒,道長田晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任国葬,我火速辦了婚禮贤徒,結(jié)果婚禮上芹壕,老公的妹妹穿的比我還像新娘。我一直安慰自己接奈,他們只是感情好踢涌,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著序宦,像睡著了一般睁壁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上互捌,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天潘明,我揣著相機與錄音,去河邊找鬼秕噪。 笑死钳降,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腌巾。 我是一名探鬼主播遂填,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼澈蝙!你這毒婦竟也來了吓坚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灯荧,失蹤者是張志新(化名)和其女友劉穎礁击,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年兜粘,在試婚紗的時候發(fā)現(xiàn)自己被綠了喳篇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秧均,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布号涯,位于F島的核電站目胡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏链快。R本人自食惡果不足惜誉己,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望域蜗。 院中可真熱鬧巨双,春花似錦噪猾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慢宗,卻和暖如春坪蚁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镜沽。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工敏晤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缅茉。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓嘴脾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宾舅。 傳聞我的和親對象是個殘疾皇子统阿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355