關于 MetaSpace 及 FastJSON 導致的 OOM

關于 MetaSpace 內存

在 JDK8 之前挚躯,虛擬機內存主要分為堆和非堆兩部分强衡,堆中劃分新生代老生代,非堆中包含所有非對象信息和運行時信息码荔,其中有一塊叫 PermGen食侮,用以保存字節(jié)碼等類信息。在 JDK8 中取消了這塊內存目胡,并添加了 MetaSpace 替代所有功能。

這兩塊的區(qū)別

最大的區(qū)別就是位置不同大小不同链快,PermGen 仍然歸屬 JVM 內存誉己,一般 32M 或者 64M,都很小域蜗,MetaSpace 直接位于本地內存巨双,默認大小只受物理機限制噪猾,直到用完物理機內存才拋出 OOM。

所以在某些情況下直接升級 JDK8 可能就出現(xiàn)內存持續(xù)增長的情況筑累,在這種情況下通過 top 命令會發(fā)現(xiàn)內存猛漲袱蜡,遠超 Xmx 設置的大小, 但通過 jmap 則發(fā)現(xiàn)正常慢宗。

例如

先看段 fastjson 的代碼:

public void process(HttpServletResponse resp) {
    ....
    SerializeConfig config = new SerializeConfig();
    config.put(Long.class, RsLongSerializer.instance);
    resp.getWriter().print(JSON.toJSONString(obj,config));
}

這段代碼的問題就在 SerializeConfig 默認會激活 asm坪蚁,在序列化對象時會為對象生成代理類,然后通過執(zhí)行代理進行序列化操作镜沽,通過這樣優(yōu)化來提高執(zhí)行性能敏晤,但在應用不合理每次新創(chuàng)建 config 的時候就會導致大量生成代碼類反而拖慢性能。反序列化時的 ParserConfig 也是同理缅茉。

在 jdk8 之前這些代理類會充滿 Perm 區(qū)導致 FullGC嘴脾,浪費點 CPU 也不會有大問題,但在 JDK8 中蔬墩,這些類會大量創(chuàng)建直至充滿物理機內存译打,進而導致進程被系統(tǒng)殺掉。

附 MetaSpace 相關參數(shù)

  • -XX:MetaspaceSize拇颅,初始空間大小奏司,達到該值就會觸發(fā)垃圾收集進行類型卸載,同時GC會對該值進行調整:如果釋放了大量的空間蔬蕊,就適當降低該值结澄;如果釋放了很少的空間,那么在不超過MaxMetaspaceSize時岸夯,適當提高該值麻献。
  • -XX:MaxMetaspaceSize,最大空間猜扮,默認是沒有限制的勉吻。
  • -XX:MinMetaspaceFreeRatio,在GC之后旅赢,最小的Metaspace剩余空間容量的百分比齿桃,減少為分配空間所導致的垃圾收集
  • -XX:MaxMetaspaceFreeRatio,在GC之后煮盼,最大的Metaspace剩余空間容量的百分比短纵,減少為釋放空間所導致的垃圾收集
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市僵控,隨后出現(xiàn)的幾起案子香到,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠就,死亡現(xiàn)場離奇詭異千绪,居然都是意外死亡,警方通過查閱死者的電腦和手機梗脾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門荸型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炸茧,你說我怎么就攤上這事瑞妇。” “怎么了宇立?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵踪宠,是天一觀的道長。 經(jīng)常有香客問我妈嘹,道長柳琢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任润脸,我火速辦了婚禮柬脸,結果婚禮上,老公的妹妹穿的比我還像新娘毙驯。我一直安慰自己倒堕,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布爆价。 她就那樣靜靜地躺著垦巴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铭段。 梳的紋絲不亂的頭發(fā)上骤宣,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音序愚,去河邊找鬼憔披。 笑死,一個胖子當著我的面吹牛爸吮,可吹牛的內容都是我干的芬膝。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼形娇,長吁一口氣:“原來是場噩夢啊……” “哼锰霜!你這毒婦竟也來了?” 一聲冷哼從身側響起桐早,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤锈遥,失蹤者是張志新(化名)和其女友劉穎纫事,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體所灸,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年炫七,在試婚紗的時候發(fā)現(xiàn)自己被綠了爬立。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡万哪,死狀恐怖侠驯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情奕巍,我是刑警寧澤吟策,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站的止,受9級特大地震影響檩坚,放射性物質發(fā)生泄漏。R本人自食惡果不足惜诅福,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一匾委、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氓润,春花似錦赂乐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崩溪,卻和暖如春浅役,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悯舟。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工担租, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抵怎。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓奋救,卻偏偏與公主長得像,于是被迫代替她去往敵國和親反惕。 傳聞我的和親對象是個殘疾皇子尝艘,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容