下一個 release 準備小長假後就要 go-live ,全部的測試 case 都 cover 過了,但還未進行過壓力測試,有點不放心,恰好過節期間家人都回家去了,假期終於能夠抽點時間壓測一把。php
以前用過一些壓力測試工具好比 loadrunner, Jmeter,感受都過重,想要使用不是軟件須要註冊就是使用起來很不駕輕就熟,此次靈光一動,想到直接使用 ab + OneAPM 進行測試,ab 的全稱是 ApacheBench , 是 apache http server 自帶的一個測試工具,專門用於 HTTP Server 的 benchmark testing,能夠同時模擬多個併發請求。公司的開發人員也在用它做一些測試,看起來也不錯,很簡單,也很容易使用。能夠對你的 Web 站點進行壓力測試,很是小,使用起來很簡單。html
若是你已經安裝了 apache,那麼在 <apache>/bin 目錄就能找到 ab,輸入
ap --help `, 裏面簡單幾個選項仔細讀一下,很快就能上手進行測試。官方使用文檔:https://httpd.apache.org/docs/2.4/programs/ab.htmljava
這個就不用多說了,性能監控軟件,如何使用參看下官網的 guide,我分別在不一樣的平臺上都試過接入 OneAPM,好比 node.js,ruby,php,java,使用起來挺簡單方便的。node
<table> <tbody> <tr> <td>環境:</td> <td>內網測試服務器</td> </tr> <tr> <td>語言:</td> <td>Ruby </td> </tr> <tr> <td> Framework: </td> <td>ror </td> </tr> <tr> <td>數據庫: </td> <td>MongoDB </td> </tr> </tbody> </table> 總共進行了兩輪壓測, 測試方式及結果:web
使用 ab 進行測試的方式:數據庫
ab -n 1000 -c 30 <your url>
apache
-n 是指總的 request
數量,-c 是指同一時間併發量ruby
如下是在添加了OneAPM Ruby agent以後,使用 apache ab 壓測結果。服務器
OneAPM 經過拓撲圖來展現應用的端到端調用關係、應用服務器與數據庫、外部 服務的調用關係以及應用之間的調用關係。同時,經過在拓撲圖中將相應模塊標記成不一樣顏色。併發
因爲只是壓測,就沒有在測試環境部署相關的後臺任務,也沒作集羣以及 LA , 在咱們的 prod 環境中,是有座 cluster 及 Load balance。
30 併發 /s 的平均響應時間在 200ms 左右,而一旦提高到 100 併發 /s,響應時間瞬間飆升到 800~900ms 左右,對於一個目前 pv 還不算高的網站,還能夠接受,但也還有提高空間。
MongoDB 在單機壓力測試下表現還能夠,若是說總體上整個站點要在優化性能的話,主要就是在 framework 上。
這個對於實時監控挺有用,可是這個僅僅是適用 vm 以及 ruby gc 的一些統計,若是能加入對 ruby container 的監控就更好了,由於我遇到過不少次,web 緩慢或者癱瘓的時候,幾回都是由於 ruby container 內存溢出,致使宕機。可是對這塊的監控就比在 ruby 或者 ror 中加探針要複雜不少了。
OneAPM 除了用於定位應用線上的問題,還配合使用 ab 壓測在項目上線前提前預知一些可能的性能瓶頸,OneAPM 的 Dashboard 就是一個很好的壓測結果報告,壓測先後的性能差別一目瞭然,不需在經過一些命令再去對比 Response time 之類的數據,總之省力不少。
比較傳統的方式是下圖這樣對比性能,編輯 bench 了一個 url 以後獲得輸出結果:
客觀的從純性能的角度出發,在生產環境中,Ruby 仍是隻適合 Small Business 。對與壓力較高的服務或應用,就必須投入大量額外的硬件資源才能維持。
最後的最後:不要在正式環境作壓力測試!!!
本文系國內 ITOM 行業領軍企業 OneAPM 經受權轉載自 cnode 社區。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。
本文轉自 OneAPM 官方博客