應用服務接口第二次請求一直pending問題

目錄

    • 一、問題背景
    • 二、問題排查過程
    • 三、解決方案
    • 四、總結

一、問題背景

升級內容發布到灰度環境,驗證相關服務,查看接口調用日志,發現第一次請求正常,第二次相同接口請求就一直pending,其他服務也是如此

二、問題排查過程

1、一開始懷疑是數據庫打滿了,導致響應阻塞,后來查看正常
2、排查后端服務日志,發現第二次請求都沒有接收到,說明和后端服務也沒有關系
3、后面仔細看pending的接口請求header報504,懷疑是nginx導致的問題
在這里插入圖片描述

三、解決方案

運維配置的nginx有問題,待解決

四、總結

如果業務系統中使用了 Nginx 作為網關,出現第一次調用接口正常,第二次一直 pending 的情況,網關出現問題是有可能的,以下是一些相關的原因及分析:

  • 連接池配置問題

原因:Nginx 可能配置了連接池來管理與后端服務的連接。如果連接池的大小設置不合理,第一次調用接口時可能創建了新連接并正常使用,但第二次調用時連接池已滿,且沒有可用連接被釋放,新的請求就會處于等待狀態,一直 pending。或者連接池中的連接在第一次使用后出現異常,但沒有被正確處理,導致第二次使用時出現問題。
解決方案:檢查 Nginx 連接池的配置參數,如keepalive指令設置的連接數等,根據實際業務需求合理調整連接池大小。同時,確保連接池中的連接在使用后能正確釋放和回收,對于異常連接要及時進行處理和清理。

  • 緩存設置問題

原因:Nginx 可能配置了緩存功能,第一次請求的結果被緩存下來,第二次請求時 Nginx 嘗試從緩存中獲取數據。如果緩存數據損壞、不完整或者緩存更新機制出現問題,可能導致 Nginx 無法正確返回緩存數據,進而使請求一直處于 pending 狀態。
解決方案:檢查 Nginx 的緩存配置,包括緩存區域的大小、緩存時間、緩存更新策略等。可以嘗試清理緩存數據,觀察問題是否解決。如果是緩存更新機制的問題,需要調整相關配置,確保緩存數據能及時、正確地更新。

  • 請求限流或限速設置

原因:Nginx 可能設置了請求限流或限速策略,以保護后端服務免受過多請求的沖擊。第一次請求可能在限流或限速范圍內正常處理,但第二次請求由于并發請求數增加或者請求頻率超過了限制,被 Nginx 暫時掛起,導致一直 pending。
解決方案:檢查 Nginx 的限流或限速配置指令,如limit_req_zone和limit_rate等,分析當前的請求流量是否超過了設置的閾值。如果是,根據實際情況調整限流或限速策略,或者增加后端服務的處理能力,以滿足業務需求。

  • Nginx 配置錯誤

原因:Nginx 的配置文件中可能存在一些錯誤或不恰當的設置,影響了接口的正常調用。例如,server塊、location塊的配置參數錯誤,導致第二次請求的路由或處理出現問題;或者proxy_pass指令配置的后端服務地址不正確,使得請求無法正確轉發。
解決方案:仔細檢查 Nginx 的配置文件,確保各個指令的參數設置正確,路由規則符合業務需求。可以使用nginx -t命令來檢查配置文件的語法正確性,并根據錯誤提示進行修改。如果懷疑配置文件中的某些部分存在問題,可以逐步注釋掉相關配置,進行測試,以定位問題所在。

  • Nginx 進程或線程問題

原因:Nginx 在處理請求時,可能出現進程或線程掛起、阻塞等異常情況。例如,某個工作進程在處理第一次請求后進入了一個異常狀態,導致后續的請求無法被正常處理,一直處于 pending 狀態。這可能是由于 Nginx 本身的代碼缺陷、內存泄漏或者受到外部因素(如系統資源不足、信號干擾等)的影響。
解決方案:查看 Nginx 的錯誤日志文件,查找是否有關于進程或線程異常的記錄。同時,監控系統的資源使用情況,如 CPU、內存、磁盤 I/O 等,確定是否存在資源不足的問題。如果發現 Nginx 進程存在異常,可以嘗試重啟 Nginx 服務,并觀察問題是否重現。如果問題仍然存在,可以考慮升級 Nginx 版本,或者向 Nginx 社區尋求幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73522.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式八股RTOS與Linux---網絡系統篇

前言 關于計網的什么TCP三次握手 幾層模型啊TCP報文啥的不在這里講,會單獨分成一個計算機網絡模塊 ??這里主要介紹介紹lwip和socket FreeRTOS下的網絡接口–移植LWIP 實際上FreeRTOS并不自帶網絡接口,我們一般會通過移植lwip協議棧讓FreeRTOS可以通過網絡接口收發數據,具體可…

推薦一款好看的 vue3 后臺模板

SoybeanAdmin 項目簡介 SoybeanAdmin 是一個基于最新前端技術棧的清新、優雅、高顏值且功能強大的后臺管理模板。它采用 Vue3, Vite5, TypeScript, Pinia, NaiveUI 和 UnoCSS 構建,為開發者提供了一個現代化、高效且易于擴展的后臺管理系統解決方案。 主要特點&am…

【django】1-1 django構建web程序的基礎知識

文章目錄 1 構建web應用的基礎知識1.1 互聯網相關的概念1.2 互聯網協議DNS(域名系統)IP協議(互聯網絡協議)TCP(傳輸控制協議)HTTP(超文本傳輸協議)SSL(安全套接字層)TLS(傳輸層安全) 1.3 URL 2 web程序2.1 web程序的本質2.2 web框架的設計模式1.2.1 經典的MVC設計模式1.2.2 Dja…

【智能體】從一個聊天工作流了解LangGraph

1. 前言 這篇文章將從如何搭建一個帶網絡搜索功能的聊天機器人工作流,帶你初步了解 LangGraph。 2. 前提條件 已搭建 Python 開發環境,使用 3.11 以上版本。 已熟悉 Python 基礎語法。可參考:【LLM】Python 基礎語法_llm python入門-CSDN博…

JAVA開發:實例成員與靜態成員

判斷Java中的實例成員與靜態成員 在Java中,可以通過以下幾種方式判斷一個成員是實例成員還是靜態成員: 1. 通過聲明方式判斷 靜態成員使用static關鍵字修飾,實例成員不使用: public class MyClass {// 實例成員int instanceVa…

Softmax 回歸 + 損失函數 + 圖片分類數據集

Softmax 回歸 softmax 回歸是機器學習另外一個非常經典且重要的模型,是一個分類問題。 下面先解釋一下分類和回歸的區別: 簡單來說,分類問題從回歸的單輸出變成了多輸出,輸出的個數等于類別的個數。 實際上,對于分…

MySQL-存儲過程

介紹 基本語法 創建 調用 查看 刪除 變量 系統變量 查看 設置 用戶定義變量 賦值 使用 局部變量 聲明 賦值 流程控制 參數 條件結構 IF case 循環結構 while repeat loop 游標 條件處理程序 介紹 舉個簡單的例子,我們先select某數據&…

使用 Go 和 Gin 實現高可用負載均衡代理服務器

前言 在現代分布式系統中,負載均衡是保障服務高可用性和性能的核心技術。本文將基于 Go 語言和 Gin 框架實現一個支持動態路由、健康檢查、會話保持等特性的企業級負載均衡代理服務器,并提供完整的壓力測試方案和優化建議。 通過本方案實現的負載均衡代理具備以下優勢: 單…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服務器,并實現遠程聯機,詳細教程

Linux 部署 MineCraft 服務器 詳細教程(丐版,無需云服務器) 一、虛擬機 Ubuntu 部署二、下載 Minecraft 服務端三、安裝 JRE 21四、安裝 MCS manager 面板五、搭建服務器六、本地測試連接七、下載櫻花,實現內網穿透,邀…

批量取消 PDF 文檔中的所有超鏈接

在 PDF 文檔中我們可以插入各種各樣的文本也可以給文本設置字體,顏色等多種樣式,同時還可以給文字或者圖片添加上超鏈接,當我們點擊超鏈接之后,就會跳轉到對應的網頁。有時候這會對我們的閱讀或者使用形成一定的干擾,今…

Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3

bge-large-zh-v1.5 下載模型到指定路徑: modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir ./bge-large-zh-v1.5自定義 embedding 模型,custom-bge-large-zh-v1.5.json: {"model_name": "custom-bge-large…

Vue的實例

Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每個 Vue 應用都以一個 Vue 組件實例作為應用的根開始。在同一個應…

Linux學習筆記(應用篇三)

基于I.MX6ULL-MINI開發板 LED學習GPIO應用編程輸入設備 開發板中所有的設備(對象)都會在/sys/devices 體現出來,是 sysfs 文件系統中最重要的目錄結構 /sys下的子目錄說明/sys/devices這是系統中所有設備存放的目錄,也就是系統中…

【圖論】網絡流算法入門

(決定狠狠加訓圖論了,從一直想學但沒啟動的網絡流算法開始。) 網絡流問題 ? 問題定義:在帶權有向圖 G ( V , E ) G(V, E) G(V,E) 中,每條邊 e ( u , v ) e(u, v) e(u,v) 有容量 c ( u , v ) c(u, v) c(u,v)&am…

遞歸、搜索與回溯第四講:floodfill算法

遞歸、搜索與回溯第四講:floodfill算法 1.Floodfill算法介紹2.圖像渲染3.島嶼數量4.島嶼的最大面積5.被圍繞的區域6.太平洋大西洋水流問題7.掃雷游戲8.衣櫥整理 1.Floodfill算法介紹 2.圖像渲染 3.島嶼數量 4.島嶼的最大面積 5.被圍繞的區域 6.太平洋大西洋水流問題…

【深度學習與實戰】2.3、線性回歸模型與梯度下降法先導案例--最小二乘法(向量形式求解)

為了求解損失函數 對 的導數,并利用最小二乘法向量形式求解 的值? 這是?線性回歸?的平方誤差損失函數,目標是最小化預測值 與真實值 之間的差距。 ?損失函數?: 考慮多個樣本的情況,損失函數為所有樣本的平方誤差之和&a…

氣象可視化衛星云圖的方式:方法與架構詳解

氣象衛星云圖是氣象預報和氣候研究的重要數據來源。通過可視化技術,我們可以將衛星云圖數據轉化為直觀的圖像或動畫,幫助用戶更好地理解氣象變化。本文將詳細介紹衛星云圖可視化的方法、架構和代碼實現。 一、衛星云圖可視化方法 1. 數據獲取與預處理 衛星云圖數據通常來源…

瀏覽器渲染原理與優化詳解

一、瀏覽器渲染基礎原理 瀏覽器渲染流程主要包括以下步驟(也稱為"關鍵渲染路徑"): 構建DOM樹:將HTML解析為DOM(文檔對象模型)樹構建CSSOM樹:將CSS解析為CSSOM(CSS對象模…

基于Spring Boot的成績管理系統后臺實現

下面是一個完整的成績管理系統后臺實現,使用Spring Boot框架,包含學生管理、課程管理和成績管理功能。 1. 項目結構 src/main/java/com/example/grademanagement/ ├── config/ # 配置類 ├── controller/ # 控制器 ├── dto/ …

實現極限網關(INFINI Gateway)配置動態加載

還在停機更新 Gateway 配置,OUT 了。 今天和大家分享一個 Gateway 的功能:動態加載配置(也稱熱更新或熱加載)。 這個功能可以在 Gateway 不停機的情況下更新配置并使之生效。 配置樣例如下: path.data: data path.…