新聞中心
- 請求發(fā)送過慢導致耗時增加;
- DNS解析過慢導致耗時增加;
- 惡劣的網絡環(huán)境導致耗時增加;
- 一直在排隊導致響應過慢;
- 服務端響應過慢導致耗時增加;
- 響應體積過大導致耗時增加;
- 等等……
一般從感官上覺得API接口響應慢,大部分人會直接歸結于服務端處理慢,其實是不合理的。通過在內網環(huán)境下的API耗時分析和外網環(huán)境下的API耗時分析的對比,一般會認識到原因所在。

我們提供的服務有:成都網站設計、網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、猇亭ssl等。為數千家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的猇亭網站制作公司
通過瀏覽器的開發(fā)者工具分析
開發(fā)者工具
重點關注指標Waiting (TTFB),TTFB代表第一個字節(jié)到達的時間。此時間包括一次往返延遲和服務器準備響應所花費的時間??梢越频恼J為是服務端耗時。
如果網絡情況不好或者響應數據過大,則Content Download耗時會長一些,這時候應該考慮壓縮響應.
Timing
開發(fā)者工具中Network中顯示了當前頁中調用的網絡資源,點擊資源可以查看資源的詳情,其中Timing是資源調用時的耗時情況。
- Queueing. 【排隊中】瀏覽器在以下情況下將請求排隊:
- 有更高優(yōu)先級的請求.
- 已為該來源打開了六個TCP連接,這是限制。僅適用于HTTP/1.0和HTTP/1.1.
- 瀏覽器正在磁盤緩存中短暫分配空間.
- Stalled. 【停滯】該請求可能由于排隊中描述的任何原因而停止.
- Proxy negotiation. 【代理協商】瀏覽器正在與代理服務器協商請求.
- Request sent. 【發(fā)送請求】該請求正在發(fā)送.
- Waiting (TTFB). 【等待中】瀏覽器正在等待響應的第一個字節(jié)。TTFB代表第一個字節(jié)到達的時間。此時間包括一次往返延遲和服務器準備響應所花費的時間.
- Content Download. 【響應內容下載】瀏覽器正在接收響應.
其他可能出現的
DNS Lookup. 【DNS】瀏覽器正在解析請求的IP地址.
Initial connection. 【初始化連接】瀏覽器正在建立連接,包括TCP握手/重試和協商SSL.
通過httpstat工具分析
httpstat git地址:
??https://github.com/reorx/httpstat ??
如果是在Linux服務器上進行調用,則可以使用httpstat。
安裝
直接下載腳本
wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
通過pip
pip install httpstat
Mac
brew install httpstat
使用
httpstat可以使用cURL的參數。
httpstat www.baidu.com httpstat 127.0.0.1/post -X POST --data-urlencode "id=1" -v
通過httpstat工具分析
Server Processing可以近似的認為是服務端耗時。
服務端到底慢在哪里?
打印耗時日志?
StopWatch stopWatch = new StopWatch();
stopWatch.start();
// ...
stopWatch.stop();
LOGGER.info("[某某某業(yè)務] - [Time:{}ms]", stopWatch.getLastTaskTimeMillis());
腦子瞬間一熱就會使用的方法,簡單直接,但是如果定位不準確,你可能要加很多這種日志。
還是用火焰圖吧
讓軟件執(zhí)行情況可視化,是性能分析、調試的利器
火焰圖的生成工具很多,比如Async Profiler、linux-perl,網上也有很多關于這方面的介紹,IDEA也集成Async Profiler,這個很方便。
IntelliJ IDEA中的火焰圖
打開火焰圖
如果沒有開啟,則點擊+號,進行添加。
打開火焰圖
選擇程序進行火焰圖的分析
可以選擇一個已經運行中的java程序進行分析,輸出火焰圖。
選擇程序進行火焰圖的分析
直接使用Async Profiler更簡單
??async-profiler git地址[1]??
安裝
從git上直接下載。
解壓下可用。
簡單使用
執(zhí)行命令。
./profiler.sh -d 10 -f /tmp/flamegraph.svg
./profiler.sh -e itimer -d 10 -f /tmp/flamegraph.svg
可以通過-e來指定cpu、alloc、lock、wall、itimer、ClassName.methodName。
- cpu:在這種模式下,profiler收集堆棧跟蹤樣本,包括Java方法、本機調用、JVM代碼和內核函數。
- alloc:可以將探查器配置為收集分配最大堆內存的調用站點,而不是檢測消耗CPU的代碼。即檢查當前分配內存最多的地方。
- lock:滿足的鎖定嘗試,包括Java對象監(jiān)視器和可重入鎖。
- wall:告訴async-profiler在給定的時間內對所有線程平均采樣,而不管線程狀態(tài)如何: 運行、休眠或阻塞。例如,在分析應用程序啟動時間時,這可能會有所幫助。
- ClassName.methodName:ClassName.methodName選項使用給定的Java方法,以便使用堆棧跟蹤記錄此方法的所有調用。
- cpu:在這種模式下,profiler收集堆棧跟蹤樣本,包括Java方法、本機調用、JVM代碼和內核函數。
bash
在瀏覽器中打開file:///tmp/flamegraph.svg,并找到調用的API,我這里調用的是ProjectManageController中的findProject方法。
火焰圖
根據長度可以看出該方法中調用方法的耗時情況,這樣我們就知道耗時主要集中在什么地方。
PS:如果方法名被編譯掉了,那么可以在java啟動時加入-XX:+PreserveFramePointer
做更多的工作
用戶體驗的優(yōu)化是一個長期而艱巨的過程,為了衡量我們網站的性能是否良好,我們有更多的工作需要去做。通常,會在底層自定義一些以用戶為中心的指標,比如Server-Timing[2]。
當前標題:前端抱怨API響應慢,怎么辦?
標題來源:http://www.5511xx.com/article/ccsgicc.html


咨詢
建站咨詢
