溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么檢測Web服務(wù)請求丟失問題

發(fā)布時間:2022-01-04 16:26:53 來源:億速云 閱讀:114 作者:iii 欄目:數(shù)據(jù)庫

這篇文章主要介紹“怎么檢測Web服務(wù)請求丟失問題”,在日常操作中,相信很多人在怎么檢測Web服務(wù)請求丟失問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么檢測Web服務(wù)請求丟失問題”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

問題描述

最近偶爾有用戶反饋某些 HTTP 接口出現(xiàn)超時問題,而 web 服務(wù)端的 Trace 監(jiān)控沒有出現(xiàn) http 返回值為 503 等異常情況。出現(xiàn)這種情況一般是web容器出現(xiàn)問題,客戶端連接不上來。本文將主要介紹如何去監(jiān)控這類問題。

我們是用典型的 Web 服務(wù)架構(gòu),應(yīng)用通過域名訪問到我們的 LVS(Linux Virtual Server)機器,LVS 后面對應(yīng)了多臺 Web 服務(wù)器。

考慮到無法對 LVS 進行跟蹤,而 Web 服務(wù)器(Tomcat 上出現(xiàn)堆積,無法評估影響范圍)??紤]再三后,我們準(zhǔn)備在Tomcat 和 LVS 上加一個 Nginx,用于追蹤用戶訪問的真實情況。Nginx 是一款自由、開源的高性能 HTTP 服務(wù)器。通過 Nginx 代碼,我們可以掌握第一手的用戶訪問的真實情況,本來是打算通過 Nginx 的 Access 日志來做統(tǒng)計, 后來參考 阿里云鏈路追蹤的文檔,用鏈路追蹤可以把 HTTP 的埋點和 Tomcat 連起來看,可以更詳情地發(fā)現(xiàn)問題。

環(huán)境準(zhǔn)備和問題復(fù)現(xiàn)編譯安裝 Nginx 和 Jaeger Agent,具體的安裝過程可以參考 阿里云鏈路追蹤文檔。 測試環(huán)境:需要重現(xiàn)超時問題,寫了一個小程序,開啟 200 個線程,每個線程連續(xù)向服務(wù)發(fā)送 500 個請求。總共提交 100000 個請求。

排查過程

排查的主題思路, 對比 Web 服務(wù)端數(shù)據(jù)和 Nginx 服務(wù)端的鏈路統(tǒng)計數(shù)據(jù),如果兩種的請求數(shù)不一致,那可以確定有請求丟失。再根據(jù)鏈路上的詳情數(shù)據(jù)來確定丟失請求的原因。

1、Web 服務(wù)端數(shù)據(jù)統(tǒng)計

發(fā)送請求后,發(fā)現(xiàn) web 服務(wù)端一共處理 98717 個請求,比客戶端少了 1283 個請求。

2、Nginx 服務(wù)端統(tǒng)計

查看 Nginx 的請求,一共有 100000 個請求,說明 Nginx 收到了全部請求,但是進入到 Web 服務(wù)上處理的只有 98717 個請求(通過 javax.servlet.Filter 埋點來監(jiān)控)。

3、問題分析

檢查 Nginx 服務(wù),發(fā)現(xiàn) Nginx 的有些請求的 HTTP 的返回碼 499。如下圖所示:

對比正常的 HTTP 鏈路,發(fā)現(xiàn) Nginx 的請求的 HTTP 的返回碼 499,只有一個 Span 就返回了,而 HTTP 返回碼為 200 的,可以看到完整的調(diào)用鏈路(鏈路上除了 Nginx 的 Span,還有 Web服務(wù)的 Span),如下圖展示:

我們可以這樣來解釋這個問題,客戶端流量進入 Web 服務(wù)器,如果 Web 服務(wù)器處理不過來(超出可承受的最大流量或者 Web 服務(wù)器本身可能出現(xiàn) FullGC,OOM,死鎖,線程池慢問題), 那客戶端設(shè)置超時的請求將會出現(xiàn) 499,未進入 javax.servlet.Filter 處理,Web 服務(wù)端看不到任何訪問記錄。

那是不是可以認為出現(xiàn) HTTP 返回值為 499 的請求都是服務(wù)端處理失敗的請求?

4、進一步排查

我們撈取下 Nginx 上返回 499 的請求,總共 2719條,大于 Web 服務(wù)丟失的 1283 個請求。這個數(shù)據(jù)對不上,是什么原因呢?我們在仔細查看了下數(shù)據(jù),有 Nginx 返回 499 的請求,但是 Web 服務(wù)返回了 200。這些請求進入 Web 服務(wù)處理程序,但是 Web 服務(wù)還沒返回就超時了。如果沒有 Tracing 把上下文鏈接起來,我們很難通過 Nginx 日志或者 Web 服務(wù)日志來解釋這個問題(一個請求,Nginx 返回 499,而 Web 服務(wù)返回 200),如下圖所示:

把 Nginx 和 Web 容器服務(wù)(Tomcat)的鏈路打通,我們可以查看 HTTP 請求每個環(huán)節(jié)的狀態(tài),很方便地定位問題。

到此,關(guān)于“怎么檢測Web服務(wù)請求丟失問題”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI