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

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

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

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

看了眼后端服務,運行正常,沒有報錯。重啟Nginx,好了一會又開始502。

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

問題現(xiàn)象

監(jiān)控數(shù)據(jù)

  • 502錯誤率:從0.1% → 5%
  • 后端服務:正常運行,無報錯
  • CPU/內存:正常
  • 發(fā)生時間:流量高峰期

特點

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

排查過程

Step 1:看Nginx錯誤日志

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

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

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

關鍵信息:是upstream連接的問題,不是后端服務本身的問題。

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

# 查看后端服務進程
ps aux | grep java

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

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

后端服務正常,直接訪問返回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個連接卡在SYN_SENT狀態(tài),說明Nginx到后端的新連接建立不上。

Step 4:檢查后端連接隊列

# 查看后端服務的accept隊列 
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隊列滿了(128是默認值),新連接無法被接受。

根因分析

什么是accept隊列

客戶端 → SYN → 服務端(半連接隊列)
服務端 → SYN+ACK → 客戶端
客戶端 → ACK → 服務端(全連接隊列/accept隊列)
應用程序 accept() → 取出連接

當accept隊列滿了,新的完成三次握手的連接無法進入隊列,客戶端會收到超時或RST。

為什么隊列滿了

后端是Spring Boot應用,默認配置:

server:
  tomcat:
    accept-count: 100  # Tomcat的accept隊列

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

流量高峰時

  1. 請求量大,新連接多
  2. accept隊列128不夠用
  3. 新連接被拒絕
  4. Nginx收到超時,返回502

解決方案

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

# 查看當前值
sysctl net.core.somaxconn

# 臨時修改
sysctl -w net.core.somaxconn=65535

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

方案二:調整Tomcat配置

server:
  tomcat:
    accept-count: 1000      # accept隊列大小
    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;      # 連接超時
        proxy_read_timeout 60s;        # 讀取超時
        proxy_send_timeout 60s;        # 發(fā)送超時
        
        proxy_http_version 1.1;        # 使用HTTP/1.1
        proxy_set_header Connection ""; # 配合keepalive
    }
}

方案四:多實例負載均衡

如果單實例撐不住,可以部署多實例:

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)化效果

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

排查命令匯總

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

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

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

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

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

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

經(jīng)驗總結

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

這次的坑:后端服務看起來正常,但accept隊列滿了,新連接進不來。

教訓

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

以上就是線上Nginx頻繁502的排查過程與解決方案的詳細內容,更多關于線上Nginx頻繁502排查的資料請關注腳本之家其它相關文章!

相關文章

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

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

    NginxProxyManager是一款基于Nginx的開源可視化管理工具,支持通過WebUI簡易管理Nginx服務器,支持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免費證書訪問步驟

    Nginx配置Https免費證書訪問步驟

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

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

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

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

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

    mac 下 安裝nginx的方法小結

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

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

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

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

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

    Nginx?proxy、rewrite、alias配置過程

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

    詳解如何修改nginx的默認端口

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

最新評論

两当县| 永登县| 当阳市| 沙雅县| 焦作市| 永胜县| 读书| 克什克腾旗| 南京市| 瑞金市| 和龙市| 梁平县| 监利县| 东乡族自治县| 从化市| 宁化县| 汾西县| 顺义区| 华坪县| 始兴县| 蒙山县| 合川市| 淄博市| 肥西县| 乡宁县| 碌曲县| 浦北县| 乌兰浩特市| 平安县| 赣榆县| 夹江县| 买车| 随州市| 怀安县| 邢台县| 琼中| 盘山县| 平乡县| 丽江市| 汉中市| 富裕县|