最近線上服務器莫名出現某些請求出現502的現象,查看了nginx的error.log,發現看一個異常報錯
upstream prematurely closed connection while reading response header from upstream(讀取響應頭時過早關閉連接)
應用程序方面也補抓到了一系列的異常
2022-03-17 08:38:08.943 [http-nio-8080-exec-30] ERROR o.a.c.c.C.[.[.[/heygood-crm].[dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [/heygood-crm] threw exception java.lang.NullPointerException: null at java.util.Objects.requireNonNull(Objects.java:203) at io.micrometer.core.instrument.ImmutableTag.<init>(ImmutableTag.java:35) at io.micrometer.core.instrument.Tag.of(Tag.java:29) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcTags.method(WebMvcTags.java:85) at org.springframework.boot.actuate.metrics.web.servlet.DefaultWebMvcTagsProvider.getTags(DefaultWebMvcTagsProvider.java:36) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.lambda$record$0(WebMvcMetricsFilter.java:166)2022-03-17 08:38:09.424 [http-nio-8080-exec-15] ERROR org.apache.coyote.http11.Http11Processor:175 - Error processing request java.lang.AssertionError: null at org.apache.catalina.mapper.Mapper.internalMap(Mapper.java:744) at org.apache.catalina.mapper.Mapper.map(Mapper.java:702) at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:696) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:337) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at java.lang.Thread.run(Thread.java:745)
了解了一下,是沒有讀取到相應的method方法以及獲取請求頭有問題
大概猜測了一下,應該是tcp請求還沒有完成,但是相應的代理服務器關閉了請求,導致數據不完整會有這樣的異常,出現這樣的原因是因為我們用了阿里的slb負載均衡,而slb負載均衡對於http1.1的keep-live的時間為60s,
但是我們本地又做了一層的nginx,nigix默認的keep-live時間為75s,導致slb關閉但是本地nigix還未關閉數據傳輸出現問題,后面配置nginx中的keepalive_timeout 59s;
暫時解決了問題
具體還等待分析