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

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

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

關(guān)于max-http-header-size配置 

概述

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

在本教程中,講解如何在 Spring Boot 2.x 應(yīng)用程序的application.properties文件中對請求標(biāo)頭進(jìn)行設(shè)置和使用max-http-header-size屬性。

Max-HTTP-Header-Size

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

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

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

server.max-http-header-size=1024000

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

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

請求頭太大

假設(shè)發(fā)送的請求的總 HTTP header大小大于max-http-header-size值。服務(wù)器以“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

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

max-http-header-size配置不合理導(dǎo)致OOM問題排查

#線上max-http-header-size導(dǎo)致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導(dǎo)致的了

5. 查看char[]里面具體內(nèi)容

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

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

  • OOM是因?yàn)榉峙湔埱箢^太大導(dǎo)致的
  • 分配的char[]數(shù)組大部分空間都未使用到

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

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

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

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

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

相關(guān)文章

  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

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

    Java Lambda List轉(zhuǎn)Map代碼實(shí)例

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

    Spring整合消息隊(duì)列RabbitMQ流程

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

    SpringBoot+Maven 多模塊項(xiàng)目的構(gòu)建、運(yùn)行、打包實(shí)戰(zhàn)

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

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

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

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

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

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

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

    Java InheritableThreadLocal用法詳細(xì)介紹

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

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

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

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

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

最新評論

馆陶县| 剑川县| 土默特右旗| 和平县| 景泰县| 永定县| 奉贤区| 西城区| 达州市| 获嘉县| 镇宁| 兴业县| 公安县| 望奎县| 河东区| 玉林市| 砀山县| 康乐县| 肥西县| 旬邑县| 利津县| 民勤县| 凤城市| 兴宁市| 贵南县| 平顶山市| 汽车| 益阳市| 前郭尔| 丰都县| 师宗县| 杨浦区| 颍上县| 石棉县| 乌苏市| 甘南县| 咸宁市| 东莞市| 军事| 五河县| 黄山市|