openresty net::ERR_HTTP2_SERVER_REFUSED_STREAM 問題參考解決方法


實際上造成此問題的核心還是請求並發太大(實際的場景也是這樣的,有一個大量的圖片請求服務)

環境說明

一般大家部署nginx (openresty)的時候都會開啟keepalive_timeout的,當前版本默認是75s,我們使用了65s

可選的優化方法

  • 禁用http2 
    如果搜索相關問題,會看到禁用http2之后錯誤消失了,此問題就是http2的,禁用應該就沒有了,因為是圖片服務,我們是希望使用http2 
    的多路復用,提高圖片現實的速度,所以此方法先放棄了
  • 加大http2_max_concurrent_streams 
    默認為128 但是經過測試之后還是沒有解決,此問題依然很明顯 (嘗試過調整不同的參數,500,1000)
  • 調整http2_max_requests (1.19.7 之后修改為了keepalive_requests) 1.19.10 之前的版本默認參數為100 
    因為我們使用的openresty 1.19.9.1 (nginx 版本1.19.9)所以直接修改keepalive_requests 為1000 
    經過測試問題緩解,基本可以算是100%解決,服務比較穩定,此參數應該結合實際進行調整修改

說明

以上只是在解決碰到問題的一些方法嘗試,理論上對於大並發場景,大家基於nginx http2 都會存在類似的問題,可以參考
多看看nignx 的changes還是很有用的(出現問題官方文檔應該經常翻),openresty 也是一樣的,目前openresty1.21.4 rc1 已經發布了,期待ga,對於nginx
的配置還是應該結合實際業務場景進行調整優化,沒有通用的配置,只有不斷優化的參數,http2 協議是復雜的,http3 更加
復雜,了解下相關的協議還是很有用的,至少我們排錯解決問題會快很多

參考資料

http://nginx.org/en/docs/http/ngx_http_v2_module.html#http2_max_concurrent_streams
https://stackoverflow.com/questions/66572034/inconsistent-err-http2-server-refused-stream-error-on-page-load
https://confluence.atlassian.com/jirakb/some-jira-pages-fail-to-render-or-some-actions-fail-to-complete-with-the-error-err_http2_server_refused_stream-1085441145.html
https://nginx.org/en/CHANGES
https://stackoverflow.com/questions/24122506/neterr-insufficient-resources-error-when-adding-numerous-img-elements-to-dom
https://openresty.org/en/ann-1019009001.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM