測試,是一個挺專業的事情。php
考察系統性能時須要同時考慮上面的性能指標。好比最多容許 2 秒之內的延遲時,系統最多能夠承受多大併發。在描述系統性能時,響應時間參數必須和吞吐量掛鉤,單純的響應時間意義不大。html
這兩個性能指標之間互相有影響:ios
某些測試可能還會有平均值和成功率這兩個性能指標。git
測試以前必須首先要明確需求。對於不一樣系統,要求的 Throughput 和 Latency 會有所不一樣。完整的測試流程以下:github
經常使用的壓力測試工具備:
- JMeter(Java 桌面應用,開源穩定且生態完善,併發差)
- wrk(簡單的 http 性能測試工具)
- Loadrunner(收費,目前屬於 microfocus)
- webbench(只支持 Linux,最多能夠模擬3萬個併發鏈接)
- http_load(程序小巧,資源佔用少)
- ab(Apache 集成,簡單功能少)
- tcpcopy(開源,生態活躍)
- 壓測大師(將測試打包成服務,在雲端直接使用)。web
性能測試時,每一個 Throughput 的壓力須要持續一段時間,尤爲是在閾值附件的 Throughput,可能須要幾個小時甚至幾天的壓測。shell
看操做系統負載,就是看操做系統的 CPU 利用率、內存使用率、磁盤 IO、網絡 IO。Linux 下經常使用的命令和工具備:SystemTap(查看內核信息,參考 這裏),iostat, top, tcpdump 等。apache
關於 CPU,多核 CPU 中的 CPU0 在執行普通任務的同時還負責核間調度,所以要確保其負責不能太高。
關於 IO,IO 使用率高時 CPU 使用率通常就比較低,程序通常會交替佔用 CPU 或 IO。性能優化
系統中 80% 的運行時間花在了 10% 的代碼上,找出那些頻繁調用的代碼並優化能夠事半功倍。網絡
測試時,能夠在代碼中使用計時器和函數調用計算器作統計並定時寫入日誌,也能夠分塊註釋進行測試以查找問題代碼段。
Profiler 測試工具:
參考 性能調優攻略。