最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

線上Nginx頻繁502的排查過程與解決方案

 更新時(shí)間:2026年01月27日 09:53:44   作者:白露與泡影  
本文詳細(xì)介紹了在線上Nginx頻繁出現(xiàn)502錯(cuò)誤的排查過程,包括監(jiān)控?cái)?shù)據(jù)、Nginx和后端服務(wù)的狀態(tài)檢查、連接數(shù)分析以及最終的解決方案,作者通過調(diào)整系統(tǒng)參數(shù)、優(yōu)化Nginx配置和多實(shí)例負(fù)載均衡等措施,成功解決了502錯(cuò)誤問題,需要的朋友可以參考下

監(jiān)控告警:Nginx 502錯(cuò)誤率飆升到5%。

看了眼后端服務(wù),運(yùn)行正常,沒有報(bào)錯(cuò)。重啟Nginx,好了一會(huì)又開始502。

排查了3個(gè)小時(shí),最后發(fā)現(xiàn)是upstream配置的問題。記錄一下排查過程。

問題現(xiàn)象

監(jiān)控?cái)?shù)據(jù)

  • 502錯(cuò)誤率:從0.1% → 5%
  • 后端服務(wù):正常運(yùn)行,無報(bào)錯(cuò)
  • CPU/內(nèi)存:正常
  • 發(fā)生時(shí)間:流量高峰期

特點(diǎn)

  • 不是全部請(qǐng)求都502,大部分正常
  • 重啟Nginx后短暫恢復(fù),然后又出現(xiàn)
  • 后端服務(wù)日志沒有異常

排查過程

Step 1:看Nginx錯(cuò)誤日志

tail -f /var/log/nginx/error.log

發(fā)現(xiàn)大量這樣的錯(cuò)誤:

upstream timed out (110: Connection timed out) while connecting to upstream
upstream prematurely closed connection while reading response header

關(guān)鍵信息:是upstream連接的問題,不是后端服務(wù)本身的問題。

Step 2:檢查后端服務(wù)狀態(tài)

# 查看后端服務(wù)進(jìn)程
ps aux | grep java

# 查看端口監(jiān)聽
ss -tlnp | grep 8080

# 直接測(cè)試后端
curl -I http://127.0.0.1:8080/health

后端服務(wù)正常,直接訪問返回200。

Step 3:檢查連接數(shù)

# 查看Nginx到后端的連接數(shù)
ss -ant | grep 8080 | wc -l

# 查看連接狀態(tài)分布
ss -ant | grep 8080 | awk '{print $1}' | sort | uniq -c

發(fā)現(xiàn)問題了:

850 ESTABLISHED
   120 TIME_WAIT
    50 SYN_SENT

有50個(gè)連接卡在SYN_SENT狀態(tài),說明Nginx到后端的新連接建立不上。

Step 4:檢查后端連接隊(duì)列

# 查看后端服務(wù)的accept隊(duì)列 
ss -lnt | grep 8080

輸出:

State    Recv-Q   Send-Q   Local Address:Port
LISTEN   129      128      0.0.0.0:8080

問題找到了! Recv-Q是129,Send-Q是128。

這說明accept隊(duì)列滿了(128是默認(rèn)值),新連接無法被接受。

根因分析

什么是accept隊(duì)列

客戶端 → SYN → 服務(wù)端(半連接隊(duì)列)
服務(wù)端 → SYN+ACK → 客戶端
客戶端 → ACK → 服務(wù)端(全連接隊(duì)列/accept隊(duì)列)
應(yīng)用程序 accept() → 取出連接

當(dāng)accept隊(duì)列滿了,新的完成三次握手的連接無法進(jìn)入隊(duì)列,客戶端會(huì)收到超時(shí)或RST。

為什么隊(duì)列滿了

后端是Spring Boot應(yīng)用,默認(rèn)配置:

server:
  tomcat:
    accept-count: 100  # Tomcat的accept隊(duì)列

而系統(tǒng)層面的限制是net.core.somaxconn = 128,取兩者較小值,所以實(shí)際accept隊(duì)列只有128。

流量高峰時(shí)

  1. 請(qǐng)求量大,新連接多
  2. accept隊(duì)列128不夠用
  3. 新連接被拒絕
  4. Nginx收到超時(shí),返回502

解決方案

方案一:調(diào)大系統(tǒng)參數(shù)

# 查看當(dāng)前值
sysctl net.core.somaxconn

# 臨時(shí)修改
sysctl -w net.core.somaxconn=65535

# 永久修改
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
sysctl -p

方案二:調(diào)整Tomcat配置

server:
  tomcat:
    accept-count: 1000      # accept隊(duì)列大小
    max-connections: 10000  # 最大連接數(shù)
    threads:
      max: 500              # 最大工作線程數(shù)

方案三:Nginx upstream優(yōu)化

upstream backend {
    server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    
    keepalive 100;  # 保持連接數(shù),減少新建連接
}

server {
    location / {
        proxy_pass http://backend;
        
        proxy_connect_timeout 5s;      # 連接超時(shí)
        proxy_read_timeout 60s;        # 讀取超時(shí)
        proxy_send_timeout 60s;        # 發(fā)送超時(shí)
        
        proxy_http_version 1.1;        # 使用HTTP/1.1
        proxy_set_header Connection ""; # 配合keepalive
    }
}

方案四:多實(shí)例負(fù)載均衡

如果單實(shí)例撐不住,可以部署多實(shí)例:

upstream backend {
    least_conn;  # 最少連接數(shù)策略
    
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=1;
    server 127.0.0.1:8082 weight=1;
    
    keepalive 100;
}

最終配置

系統(tǒng)參數(shù)(/etc/sysctl.conf):

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535

Spring Boot配置

server:
  tomcat:
    accept-count: 2000
    max-connections: 20000
    threads:
      max: 500
      min-spare: 50

Nginx配置

upstream backend {
    server 127.0.0.1:8080;
    keepalive 200;
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
    }
}

優(yōu)化效果

指標(biāo)優(yōu)化前優(yōu)化后
502錯(cuò)誤率5%0.01%
accept隊(duì)列溢出頻繁
連接建立時(shí)間不穩(wěn)定穩(wěn)定<5ms

排查命令匯總

# 查看Nginx錯(cuò)誤日志
tail -f /var/log/nginx/error.log

# 查看連接狀態(tài)
ss -ant | grep <端口>

# 查看監(jiān)聽隊(duì)列
ss -lnt | grep <端口>

# 查看隊(duì)列溢出統(tǒng)計(jì)
netstat -s | grep -i listen

# 查看系統(tǒng)參數(shù)
sysctl net.core.somaxconn

# 實(shí)時(shí)監(jiān)控連接數(shù)
watch -n 1 'ss -ant | grep <端口> | wc -l'

經(jīng)驗(yàn)總結(jié)

502原因排查方向
upstream timed out后端處理慢或連接隊(duì)列滿
connection refused后端服務(wù)沒啟動(dòng)
no live upstreams所有后端都不可用
prematurely closed后端主動(dòng)斷開連接

這次的坑:后端服務(wù)看起來正常,但accept隊(duì)列滿了,新連接進(jìn)不來。

教訓(xùn)

  1. 系統(tǒng)默認(rèn)的somaxconn=128太小,生產(chǎn)環(huán)境必須調(diào)大
  2. Nginx配置keepalive可以減少新建連接,降低隊(duì)列壓力
  3. 監(jiān)控要加上連接隊(duì)列指標(biāo)

以上就是線上Nginx頻繁502的排查過程與解決方案的詳細(xì)內(nèi)容,更多關(guān)于線上Nginx頻繁502排查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Nginx可視化管理軟件NginxProxyManager的使用

    Nginx可視化管理軟件NginxProxyManager的使用

    NginxProxyManager是一款基于Nginx的開源可視化管理工具,支持通過WebUI簡(jiǎn)易管理Nginx服務(wù)器,支持DockerCompose快速部署在Linux、Windows、macOS上,提供SSL證書獲取、多代理管理等功能,感興趣的可以了解一下
    2024-11-11
  • 比較完整的Nginx配置文件nginx.conf常用參數(shù)中文詳解

    比較完整的Nginx配置文件nginx.conf常用參數(shù)中文詳解

    這篇文章主要介紹了比較完整的Nginx配置文件nginx.conf常用參數(shù)中文詳解,需要的朋友可以參考下
    2015-07-07
  • Nginx配置Https免費(fèi)證書訪問步驟

    Nginx配置Https免費(fèi)證書訪問步驟

    這篇文章主要為大家介紹了Nginx配置Https免費(fèi)證書訪問步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • nginx上設(shè)置html不緩存的方法實(shí)現(xiàn)

    nginx上設(shè)置html不緩存的方法實(shí)現(xiàn)

    前端項(xiàng)目發(fā)布以后,經(jīng)常會(huì)遇到訪問不到最新的版本,這主要是由于我們項(xiàng)目的入口文件index.html被瀏覽器或者代理緩存了,本文主要介紹了nginx上設(shè)置html不緩存,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Nginx proxy_ssl_server_name 解決后端多域名證書匹配失敗的方法

    Nginx proxy_ssl_server_name 解決后端多域名證書匹配失敗的方法

    本文介紹了Nginx反向代理HTTPS后端時(shí)的關(guān)鍵指令proxy_ssl_server_name,當(dāng)后端托管多域名證書時(shí),Nginx需啟用SNI擴(kuò)展以正確匹配證書,本文詳細(xì)分析了問題場(chǎng)景、基礎(chǔ)解決方案,并提供了進(jìn)階配置方案,感興趣的可以了解一下
    2026-04-04
  • mac 下 安裝nginx的方法小結(jié)

    mac 下 安裝nginx的方法小結(jié)

    這里簡(jiǎn)單記錄一下在mac系統(tǒng)下安裝nginx的方法,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 如何自定義Nginx JSON日志格式配置

    如何自定義Nginx JSON日志格式配置

    Nginx作為最流行的Web服務(wù)器之一,其靈活的日志配置能力允許我們根據(jù)需求定制日志格式,本文將詳細(xì)介紹如何配置Nginx以JSON格式記錄訪問日志,這種結(jié)構(gòu)化日志格式特別適合ELK等日志分析系統(tǒng)處理,感興趣的朋友一起看看吧
    2025-03-03
  • nginx通過nginx_upstream_check_module實(shí)現(xiàn)后端健康檢查

    nginx通過nginx_upstream_check_module實(shí)現(xiàn)后端健康檢查

    nginx的健康檢查有兩種,一種是被動(dòng)健康檢查,也就是nginx自帶健康檢查模塊ngx_http_upstream_module,另一種就是主動(dòng)健康檢查,使用第三方模塊nginx_upstream_check_module,下面就來介紹一下,感興趣的可以了解一下
    2024-08-08
  • Nginx?proxy、rewrite、alias配置過程

    Nginx?proxy、rewrite、alias配置過程

    這篇文章主要介紹了Nginx?proxy、rewrite、alias配置過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解如何修改nginx的默認(rèn)端口

    詳解如何修改nginx的默認(rèn)端口

    這篇文章主要介紹了詳解如何修改nginx的默認(rèn)端口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

葵青区| 涞水县| 吉首市| 高要市| 巴南区| 清远市| 嵊泗县| 灵石县| 马尔康县| 榆中县| 安徽省| 河南省| 南康市| 秭归县| 正蓝旗| 文昌市| 上虞市| 高阳县| 盐山县| 黎平县| 黑河市| 南靖县| 横山县| 资兴市| 稷山县| 永城市| 九龙坡区| 泽普县| 静安区| 百色市| 府谷县| 台北县| 乌海市| 伽师县| 龙胜| 宝清县| 集贤县| 汝州市| 曲阜市| 平南县| 孝昌县|