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

Spring?Boot中的max-http-header-size配置方式

 更新時間:2022年09月30日 10:28:09   作者:融極  
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

關于max-http-header-size配置 

概述

默認情況下,Spring Boot Web 應用程序包括一個預配置的嵌入式 Web 服務器。但是,在某些情況下,我們希望修改默認配置以滿足自定義要求。

在本教程中,講解如何在 Spring Boot 2.x 應用程序的application.properties文件中對請求標頭進行設置和使用max-http-header-size屬性。

Max-HTTP-Header-Size

Spring Boot 支持Tomcat、Undertow和Jetty作為嵌入式服務器。通常,我們在 Spring Boot 應用程序中的application.properties文件或application.yaml文件中進行服務器配置。

大多數(shù) Web 服務器都有自己的一組 HTTP 請求header大小限制。HTTP header值受服務器實現(xiàn)的限制。在 Spring Boot 應用程序中,最大 HTTP header大小是使用server.max-http-header-size 配置的。Tomcat和Jetty的實際默認值為8kB,Undertow的默認值為1MB。

要修改最大 HTTP header大小,在application.properties文件中進行如下配置:

server.max-http-header-size=1024000

從 Spring Boot 2.1 開始,可使用DataSize可解析值:

server.max-http-header-size=10KB

請求頭太大

假設發(fā)送的請求的總 HTTP header大小大于max-http-header-size值。服務器以“400 Bad request”錯誤拒絕請求。在下一個示例中,我們將在日志文件中看到此錯誤。

讓我們創(chuàng)建一個控制器,它有一個名為 token 的header屬性:

@RestController
@RequestMapping(value = "/request-header-test")
public class MaxHttpHeaderSizeController {
    @GetMapping
    public boolean testMaxHTTPHeaderSize(@RequestHeader(value = "token") String token) {
    return true;
    }
}

接下來,讓我們向application.properties文件添加一些屬性:

## Server connections configuration
server.tomcat.threads.max=200
server.connection-timeout=5s
server.max-http-header-size=8KB
server.tomcat.max-swallow-size=2MB
server.tomcat.max-http-post-size=2MB

當我們在token中傳遞一個大小大于 8kb的字符串值時,得到 400 錯誤,如下所示:

max-http-header-size配置不合理導致OOM問題排查

#線上max-http-header-size導致oom問題排查

1. 首先線上vm參數(shù)配置-XX:+HeapDumpOnOutOfMemoryError

線上oom后會生成java_pidxxx.hprof文件

2. 使用Jprofiler分析下占用最大的空間是 char[]數(shù)組

3. 看下OOM棧信息

// 這里把棧信息粘貼出來看一下
Thread dump at 27588:02.814.491
* Thread group "main":
  Thread "http-nio-51026-exec-115":
    at java.lang.OutOfMemoryError.<init>() (line: 48)
    at java.nio.HeapByteBuffer.<init>(int, int) (line: 57)
    at java.nio.ByteBuffer.allocate(int) (line: 335)
    at org.apache.coyote.http11.Http11OutputBuffer.<init>(org.apache.coyote.Response, int) (line: 110)
    at org.apache.coyote.http11.Http11Processor.<init>(org.apache.coyote.http11.AbstractHttp11Protocol, org.apache.coyote.Adapter) (line: 163)
    at org.apache.coyote.http11.AbstractHttp11Protocol.createProcessor() (line: 1001)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(org.apache.tomcat.util.net.SocketWrapperBase, org.apache.tomcat.util.net.SocketEvent) (line: 853)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun() (line: 1590)
    at org.apache.tomcat.util.net.SocketProcessorBase.run() (line: 49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) (line: 1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run() (line: 624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run() (line: 61)
    at java.lang.Thread.run() (line: 748)

4. 定位源碼

可以看到多半就是分配headerBufferSize導致的了

5. 查看char[]里面具體內容

不難發(fā)現(xiàn)數(shù)組后面大部分元素都是0

6. 綜合上述情況,可以得出一下結論

  • OOM是因為分配請求頭太大導致的
  • 分配的char[]數(shù)組大部分空間都未使用到

7. 為什么會分配那么大的請求頭?是否和某個配置相關嗎?

排查配置發(fā)現(xiàn)

server:
    max-http-header-size: 10485760 #10M,值太大,并發(fā)量一上來服務就內存溢出了
# max-http-header-size單位為字節(jié),默認值為8*1024字節(jié)=8kb

修改配置前和修改后再次壓測,修改后發(fā)現(xiàn)不會有這種情況了。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 語言和 API 功能。在本文中,我們將重點放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達式,方法引用,JSR-310的日期和時間,和可重復注釋。下面跟著小編一起來看下吧
    2017-03-03
  • Java Lambda List轉Map代碼實例

    Java Lambda List轉Map代碼實例

    這篇文章主要介紹了Java Lambda List轉Map代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Spring整合消息隊列RabbitMQ流程

    Spring整合消息隊列RabbitMQ流程

    Spring整合RabbitMQ很容易,但是整合的目的是為了使用,那要使用RabbitMQ就要對其有一定的了解,不然容易整成一團漿糊。因為說到底,Spring只是在封裝RabbitMQ的API,讓其更容易使用而已,廢話不多說,讓我們一起整它
    2023-03-03
  • SpringBoot+Maven 多模塊項目的構建、運行、打包實戰(zhàn)

    SpringBoot+Maven 多模塊項目的構建、運行、打包實戰(zhàn)

    這篇文章主要介紹了SpringBoot+Maven 多模塊項目的構建、運行、打包實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java多線程中停止線程遇到線程阻塞的處理方法詳解

    Java多線程中停止線程遇到線程阻塞的處理方法詳解

    這篇文章主要介紹了Java多線程中停止線程遇到線程阻塞的處理方法詳解,在阻塞狀態(tài)下,線程會釋放CPU資源,從而允許其他線程執(zhí)行,線程阻塞是實現(xiàn)多線程編程中重要的概念,可以提高程序的效率和資源利用率,需要的朋友可以參考下
    2023-10-10
  • SpringApplicationRunListener監(jiān)聽器源碼詳解

    SpringApplicationRunListener監(jiān)聽器源碼詳解

    這篇文章主要介紹了SpringApplicationRunListener監(jiān)聽器源碼詳解,springboot提供了兩個類SpringApplicationRunListeners、SpringApplicationRunListener(EventPublishingRunListener),spring框架還提供了一個ApplicationListener接口,需要的朋友可以參考下
    2023-11-11
  • Java在讀取文件內容的時候,如何判斷出空白行的操作

    Java在讀取文件內容的時候,如何判斷出空白行的操作

    這篇文章主要介紹了Java在讀取文件內容的時候,如何判斷出空白行的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java InheritableThreadLocal用法詳細介紹

    Java InheritableThreadLocal用法詳細介紹

    InheritableThreadLocal繼承了ThreadLocal,此類擴展了ThreadLocal以提供從父線程到子線程的值的繼承:當創(chuàng)建子線程時,子線程接收父線程具有的所有可繼承線程局部變量的初始值。 通常子線程的值與父線程的值是一致的
    2022-09-09
  • scala當中的文件操作和網(wǎng)絡請求的實現(xiàn)方法

    scala當中的文件操作和網(wǎng)絡請求的實現(xiàn)方法

    這篇文章主要介紹了scala當中的文件操作和網(wǎng)絡請求的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 關于SpringBoot禁止循環(huán)依賴解說

    關于SpringBoot禁止循環(huán)依賴解說

    這篇文章主要介紹了關于SpringBoot禁止循環(huán)依賴解說,Spring的Bean管理,文章圍繞主題展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05

最新評論

福建省| 贵州省| 青神县| 永川市| 和静县| 南京市| 涡阳县| 北流市| 都兰县| 紫金县| 定远县| 乳源| 沐川县| 荆门市| 基隆市| 龙岩市| 庄河市| 澎湖县| 永宁县| 永吉县| 宜兴市| 固阳县| 安化县| 两当县| 班玛县| 临桂县| 大同县| 武夷山市| 竹山县| 东源县| 中卫市| 徐水县| 即墨市| 蓬莱市| 泰兴市| 吉林市| 永宁县| 馆陶县| 新宾| 南丰县| 竹北市|