max-http-header-size 導(dǎo)致的FULL GC問題

不知道從哪一天開始窝稿,項(xiàng)目每隔一段時(shí)間楣富,就會(huì)出現(xiàn)一次OOM問題,具體的表現(xiàn)就是伴榔,剛開始纹蝴,用戶請(qǐng)求變慢庄萎,隔幾分鐘后,所有的請(qǐng)求都沒有響應(yīng)塘安,最終服務(wù)出現(xiàn)FULL GC問題惨恭。

日志大概是這樣的:


image.png

最開始,以為是項(xiàng)目中緩存或者是數(shù)據(jù)庫配置的導(dǎo)致的問題耙旦,但是改了之后依然不行脱羡。
由于這個(gè)問題是偶現(xiàn)的,每次出現(xiàn)問題免都,為了項(xiàng)目正常使用锉罐,基本上都是直接重啟來解決。

終于有一天绕娘,服務(wù)又崩了脓规,于是下定決心要把這個(gè)問題找出來。

解決這種問題险领,離不開JVM的相關(guān)知識(shí)侨舆,以及java提供的一些工具。

分析問題

首先绢陌,使用 jstat 命令挨下,分析jvm的GC情況,
jstat -gcutil pid 1000 (pid是通過top命令找到的java線程的pid)


1661305683073_6EAA1DB2-37FA-42b7-BD92-8005A9DFF9C1.png

可以發(fā)現(xiàn)脐湾,O(老年代占用了大量的空間) 同時(shí)FGC頻繁回收臭笆,導(dǎo)致的問題。

接下來秤掌,就是通過 jmap命令愁铺,分析下內(nèi)存的使用情況了
jmap -histo:live pid | more (pid是通過top命令找到的java線程的pid)

1661306307255_CD4F5656-92AB-4997-A141-002296135F9B.png

我們的應(yīng)用,啟動(dòng)配置參數(shù)是這樣的 -Xms2560m -Xmx2560m
但是可以看到闻鉴,這其中 一個(gè)[B的class 茵乱,就占用了1.6G的內(nèi)存,這個(gè)[B是啥呢孟岛,他是JAVA中的byte數(shù)組瓶竭。
為啥byte數(shù)組會(huì)占用了這么多的內(nèi)存,我是滿腦子的問號(hào)蚀苛。

沒辦法在验,只能把內(nèi)存文件dump出來分析下了。
使用命令
jmap -dump:format=b,file=a.prof pid (pid是通過top命令找到的java線程的pid)
最終我們得到了一個(gè) a.prof的文件堵未,這個(gè)文件通常比較大腋舌,像我們的。足足2個(gè)G渗蟹,畢竟項(xiàng)目分配了2個(gè)G块饺,GC OOM導(dǎo)致都占用完了赞辩。

然后使用gzip 命令壓縮下,
gzip -q a.prof
壓縮后授艰,文件只有50M不到辨嗽,這樣就能方便下載下來分析了。

下載下來后淮腾,通過 MAT工具進(jìn)行分析糟需,關(guān)于這個(gè)工具,可以去網(wǎng)上找教程進(jìn)行下載安裝谷朝。

打開軟件后洲押,通過 File- Open Heap Dump 打開我們上面的dump文件。


image.png

然后點(diǎn)擊 Dominator Tree 圆凰,看下具體的占用


image.png

發(fā)現(xiàn)這其中杈帐,并沒有像網(wǎng)上那種,有一個(gè)單獨(dú)的對(duì)象占用了很大的內(nèi)存专钉,而是有很多個(gè)byte數(shù)組平均占用了內(nèi)存挑童,每個(gè)都占用了大概10M 的內(nèi)存,然后數(shù)量一多跃须,就導(dǎo)致了OOM站叼,通過className,可以發(fā)現(xiàn),是一個(gè)http請(qǐng)求路徑回怜。

這個(gè)路徑大年,在項(xiàng)目里面對(duì)的作用,是給三方渠道作為下載鏈接使用的玉雾,那為啥會(huì)這么多這個(gè)請(qǐng)求呢。

通過HTTP請(qǐng)求日志發(fā)現(xiàn)轻要,每次問題發(fā)生時(shí)复旬,都會(huì)有大量的請(qǐng)求調(diào)用這個(gè)接口,高峰大概每秒50+冲泥。


image.png

這個(gè)請(qǐng)求量驹碍,說大不大,說小也不小凡恍。正常單機(jī)tomcat對(duì)付這個(gè)志秃,應(yīng)該是問題不大的。但是為啥還出現(xiàn)這個(gè)問題呢嚼酝。

問題出現(xiàn)的原因浮还,是每個(gè)請(qǐng)求占用了10M的內(nèi)存導(dǎo)致的,最終我在配置文件里闽巩,看到了這么一行
max-http-header-size: 10000000
這個(gè)配置的作用钧舌,是配置請(qǐng)求頭最大值担汤,但是這就導(dǎo)致,一個(gè)請(qǐng)求進(jìn)來洼冻,tomcat就會(huì)申請(qǐng)10M的內(nèi)存空間崭歧,當(dāng)大量請(qǐng)求同時(shí)間進(jìn)來,內(nèi)存來不及釋放撞牢,最終導(dǎo)致了這個(gè)內(nèi)存泄漏的問題率碾。

解決辦法很簡(jiǎn)單,把這個(gè)值改小就行屋彪,正常項(xiàng)目一般100K就足夠了所宰。

終于把這個(gè)困擾了幾個(gè)月的問題解決了!:嘲唷歧匈!

關(guān)于 max-http-header-size的設(shè)置可以參考 https://www.baeldung.com/spring-boot-max-http-header-size
網(wǎng)上其他人碰到的這個(gè)問題 https://blog.csdn.net/xiaoming120915/article/details/120472272

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市砰嘁,隨后出現(xiàn)的幾起案子件炉,更是在濱河造成了極大的恐慌,老刑警劉巖矮湘,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斟冕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缅阳,警方通過查閱死者的電腦和手機(jī)磕蛇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來十办,“玉大人秀撇,你說我怎么就攤上這事∠蜃澹” “怎么了呵燕?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)件相。 經(jīng)常有香客問我再扭,道長(zhǎng),這世上最難降的妖魔是什么夜矗? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任泛范,我火速辦了婚禮,結(jié)果婚禮上紊撕,老公的妹妹穿的比我還像新娘罢荡。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布柠傍。 她就那樣靜靜地躺著麸俘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惧笛。 梳的紋絲不亂的頭發(fā)上从媚,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音患整,去河邊找鬼拜效。 笑死,一個(gè)胖子當(dāng)著我的面吹牛各谚,可吹牛的內(nèi)容都是我干的紧憾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼昌渤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赴穗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起膀息,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤般眉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后潜支,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甸赃,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年冗酿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埠对。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裁替,死狀恐怖项玛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弱判,我是刑警寧澤稍计,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站裕循,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏净刮。R本人自食惡果不足惜剥哑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淹父。 院中可真熱鬧株婴,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至座哩,卻和暖如春徒扶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背根穷。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工姜骡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屿良。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓圈澈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尘惧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子康栈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容