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

Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案

 更新時(shí)間:2021年10月29日 11:15:43   作者:該用戶快成仙了  
本篇文章介紹了我在開(kāi)發(fā)過(guò)程中遇到的線上內(nèi)存暴漲的問(wèn)題,以及定位問(wèn)題原因和解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下

前因:

因?yàn)镽EST規(guī)范,定義資源獲取接口使用GET請(qǐng)求,參數(shù)拼接在url上。

如果按上述定義,當(dāng)參數(shù)過(guò)長(zhǎng),超過(guò)tomcat默認(rèn)配置 max-http-header-size :8kb

會(huì)報(bào)一下錯(cuò)誤信息:

Request header is too large

可以修改springboot配置,調(diào)整請(qǐng)求頭大小

server: 
    max-http-header-size: xxx  

后果:

如果max-http-header-size設(shè)置過(guò)大,會(huì)導(dǎo)致接口吞吐下降,jvm oom,內(nèi)存泄漏。

因?yàn)閠omcat 會(huì)用HeapByteBuffer 預(yù)分配請(qǐng)求頭內(nèi)存大小,在堆上分配。

線上內(nèi)存暴漲問(wèn)題定位和解決

請(qǐng)求和響應(yīng)都是一樣的配置,每次請(qǐng)求處理預(yù)先分配,2倍配置值內(nèi)存大小在 jvm 堆中

請(qǐng)求過(guò)多,導(dǎo)致線上內(nèi)存暴漲,老年代有3GB多。使用jmap dump線上內(nèi)存數(shù)據(jù),使用 JProfiler 分析。

線上內(nèi)存暴漲問(wèn)題定位和解決

線上內(nèi)存暴漲問(wèn)題定位和解決

符合配置大小和源碼對(duì)象

線上內(nèi)存暴漲問(wèn)題定位和解決

數(shù)組有3GB,和老年代和eden區(qū)總和大小相近。


-XX:PretenureSizeThreshold jvm參數(shù)用來(lái)設(shè)置默認(rèn)值,當(dāng)數(shù)組或?qū)ο蟠笮〕^(guò)這個(gè)設(shè)定值,直接在 Old Gen 老年代分配;默認(rèn)值0,當(dāng)超過(guò)eden區(qū)的大小的時(shí)候,直接分配到old區(qū)。

使用 java -XX:+PrintCommandLineFlags -version

線上內(nèi)存暴漲問(wèn)題定位和解決

發(fā)現(xiàn)并沒(méi)有使用
-XX:PretenureSizeThreshold參數(shù),所以是

max-http-header-size設(shè)置過(guò)大,eden區(qū)分配不夠,直接分配到old區(qū),堆區(qū)內(nèi)存不夠,自動(dòng)擴(kuò)容,導(dǎo)致old區(qū)數(shù)據(jù)越來(lái)越多,頻繁觸發(fā)FullGC。

JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小 于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、 -Xmx相等以避免在每次GC后調(diào)整堆的大小。

線上內(nèi)存暴漲問(wèn)題定位和解決

線上內(nèi)存暴漲問(wèn)題定位和解決

線上內(nèi)存暴漲問(wèn)題定位和解決

其中http-nio-9005-exec-線程有146個(gè),和前面配置需要分配的20M內(nèi)存請(qǐng)求,相乘的數(shù)據(jù)與3000MB相近。

線上內(nèi)存暴漲問(wèn)題定位和解決

tomcat任務(wù)線程池 最大線程數(shù)200,存活時(shí)間60s

線上內(nèi)存暴漲問(wèn)題定位和解決

因?yàn)門askQueue 重寫(xiě)了offer方法,在線程池大小小于最大線程數(shù)時(shí),任務(wù)不會(huì)放入任務(wù)隊(duì)列,只會(huì)交給現(xiàn)有線程執(zhí)行;存活時(shí)間60s,只有當(dāng)線程空閑60s才會(huì)被回收,也就是**60秒內(nèi)請(qǐng)求要小于當(dāng)前線程數(shù),**才會(huì)有空閑線程。這就導(dǎo)致了線程不能及時(shí)被回收。請(qǐng)求數(shù)下降,但是內(nèi)存還是居高不下。

解決方案:

max-http-header-size修改為默認(rèn)值,接口請(qǐng)求方式修改為POST,請(qǐng)求參數(shù)放置于body

到此這篇關(guān)于Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案的文章就介紹到這了,更多相關(guān)Java 內(nèi)存暴漲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置

    SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置

    今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java中JVM常用參數(shù)配置教程(提供配置示例)

    Java中JVM常用參數(shù)配置教程(提供配置示例)

    這篇文章主要給大家介紹了關(guān)于Java中JVM常用參數(shù)配置的相關(guān)資料, jvm的參數(shù)有很多,必須知道參數(shù)分類并且記住面試常見(jiàn)的幾個(gè)參數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java?循環(huán)隊(duì)列/環(huán)形隊(duì)列的實(shí)現(xiàn)流程

    Java?循環(huán)隊(duì)列/環(huán)形隊(duì)列的實(shí)現(xiàn)流程

    循環(huán)隊(duì)列又叫環(huán)形隊(duì)列,是一種特殊的隊(duì)列。循環(huán)隊(duì)列解決了隊(duì)列出隊(duì)時(shí)需要將所有數(shù)據(jù)前移一位的問(wèn)題。本文將帶大家詳細(xì)了解循環(huán)隊(duì)列如何實(shí)現(xiàn),需要的朋友可以參考一下
    2022-02-02
  • JAVA封裝多線程實(shí)現(xiàn)的方式及原理

    JAVA封裝多線程實(shí)現(xiàn)的方式及原理

    這篇文章主要介紹了Java中封裝多線程的原理和常見(jiàn)方式,通過(guò)封裝可以簡(jiǎn)化多線程的使用,提高安全性,并增強(qiáng)代碼的可維護(hù)性和可擴(kuò)展性,需要的朋友可以參考下
    2025-03-03
  • 超詳細(xì)解釋Java反射

    超詳細(xì)解釋Java反射

    本文非常詳細(xì)的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • Mybatis-Plus 條件構(gòu)造器示例詳解

    Mybatis-Plus 條件構(gòu)造器示例詳解

    這篇文章主要介紹了Mybatis-Plus 條件構(gòu)造器的相關(guān)資料,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java線程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示

    Java線程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示

    這篇文章主要為大家詳細(xì)介紹了Java線程實(shí)現(xiàn)時(shí)間動(dòng)態(tài)顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • SpringBoot集成本地緩存性能之王Caffeine示例詳解

    SpringBoot集成本地緩存性能之王Caffeine示例詳解

    這篇文章主要為大家介紹了SpringBoot集成本地緩存性能之王Caffeine的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java?六類運(yùn)算符詳解

    Java?六類運(yùn)算符詳解

    這篇文章主要介紹了Java?六類運(yùn)算符,在?Java?語(yǔ)言中,運(yùn)算符有算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、字符串連接運(yùn)算符、條件運(yùn)算符,感興趣的朋友可以閱讀一下
    2023-03-03
  • Spring 中優(yōu)雅的獲取泛型信息的方法

    Spring 中優(yōu)雅的獲取泛型信息的方法

    這篇文章主要介紹了Spring 中優(yōu)雅的獲取泛型信息的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

祁连县| 茂名市| 怀宁县| 汕头市| 广南县| 宜宾县| 壤塘县| 惠水县| 清新县| 涡阳县| 太谷县| 清水河县| 安龙县| 甘泉县| 成都市| 栾城县| 武穴市| 唐山市| 松滋市| 香港 | 玉山县| 大兴区| 九龙坡区| 沈阳市| 禹城市| 平安县| 龙州县| 泰和县| 孟连| 紫金县| 邳州市| 乐都县| 东至县| 阳泉市| 丰原市| 微山县| 宣化县| 灵山县| 舟曲县| 开平市| 花莲市|