結(jié)合實際業(yè)務(wù)的Java程序內(nèi)存分析(一)

背景

近期線上web服務(wù)內(nèi)存占用較大愉镰,空間資源消耗很多【冢考慮到后續(xù)訪問壓力會越來越大丈探,防止GC頻繁,OOM等內(nèi)存問題爆發(fā)拔莱,提前分析內(nèi)存使用情況碗降。

思路

思路1:重點對象進(jìn)行評估隘竭,預(yù)估其真實大小值,內(nèi)存可占大小遗锣。--探路

思路2:全局觀察數(shù)據(jù),分析堆中對象的大小嗤形,數(shù)目精偿。--全局思考

思路3:結(jié)合思路1,思路2赋兵,理清業(yè)務(wù)邏輯笔咽,推斷內(nèi)存過大原因。--分析總結(jié)

步驟

1霹期,探路

系統(tǒng)主要對外提供數(shù)據(jù)訪問服務(wù)叶组。數(shù)據(jù)的讀取,計算和封裝等操作历造,經(jīng)驗來說就是內(nèi)存占用的最大“元兄”甩十。

簡單的計算數(shù)據(jù)對象大小的方法:對象序列化操作,計算值和真實值的比值約在0.5到2之間吭产。

核心代碼:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(baos);

oos.writeObject(movie.toRecResultVideo().toJSON().toString());

byte[] bs = baos.toByteArray();

m_bytes+=bs.length;

oos.close();

數(shù)量預(yù)估:

使用:jmap -histo $PID | head -n 對象關(guān)鍵字符串

獲得線索對象總量侣监,此時的內(nèi)存大小僅供參考,它依賴的對象是不會計算在內(nèi)的臣淤,不準(zhǔn)確橄霉。

結(jié)合實際業(yè)務(wù)場景,預(yù)估核心數(shù)據(jù)占內(nèi)存的使用大小邑蒋。

2姓蜂,全局思考

jmap是個不錯的jdk自帶的實時java進(jìn)程內(nèi)存分析工具。

使用:jmap -histo $PID | head -n 20

前20條最大內(nèi)存使用對象医吊。

參考數(shù)據(jù):

num? ? #instances? ? ? ? #bytes? class name

----------------------------------------------

1:? ? ? 23576457? ? ? 977320576? [C

2:? ? ? 22579841? ? ? 541916184? java.lang.String

3:? ? ? 7314642? ? ? 234068544? java.util.HashMap$Node

4:? ? ? 1700093? ? ? 132600320? [Ljava.util.HashMap$Node;

5:? ? ? ? 329053? ? ? 122648832? [B

6:? ? ? 1741893? ? ? 83610864? java.util.HashMap

7:? ? ? ? 40426? ? ? 65754792? [Ljava.lang.String;

8:? ? ? ? 818186? ? ? 41559272? [Ljava.lang.Object;

9:? ? ? ? 793279? ? ? 31731160? java.util.HashMap$KeyIterator

10:? ? ? 1489661? ? ? 23834576? org.json.JSONObject

11:? ? ? ? 811144? ? ? 19467456? java.util.ArrayList

12:? ? ? ? 281120? ? ? 17991680? java.net.URL

13:? ? ? ? 49129? ? ? 17498424? [I

14:? ? ? ? 574117? ? ? 13778808? java.lang.StringBuffer

15:? ? ? ? 213742? ? ? 10259616? com.firedata.brain.er.dict.DictElement

16:? ? ? ? 406102? ? ? ? 9746448? com.firedata.brain.er.util.PrefixTrie$Node

17:? ? ? ? 565584? ? ? ? 9049344? org.json.JSONArray

其中:字符數(shù)組钱慢,字符串對象,hashmap節(jié)點卿堂,字節(jié)數(shù)據(jù)滩字,jsonobject,arraylist御吞,url等占的對象較大麦箍。

3,分析總結(jié)

結(jié)合業(yè)務(wù)特點(具體業(yè)務(wù)需要保密)陶珠,核心機(jī)制包括兩點:

a挟裂,數(shù)據(jù)讀取,轉(zhuǎn)換揍诽,占用大量字符數(shù)組诀蓉,字符串對象栗竖,json對象。

b渠啤,數(shù)據(jù)計算狐肢,占用大量的HashMap,ArrayList沥曹。

總結(jié):

1份名,優(yōu)化方向一,優(yōu)化數(shù)據(jù)對象的大小和數(shù)目妓美,使之和當(dāng)前進(jìn)程配置參數(shù)“和諧共處”僵腺,避免oom,避免gc頻繁壶栋;后續(xù)繼續(xù)使用工具觀察gc情況辰如;

2,優(yōu)化方向二贵试,計算模塊不要亂用容器類琉兜,相當(dāng)占資源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毙玻,一起剝皮案震驚了整個濱河市呕童,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淆珊,老刑警劉巖夺饲,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異施符,居然都是意外死亡往声,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門戳吝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浩销,“玉大人,你說我怎么就攤上這事听哭÷螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵陆盘,是天一觀的道長普筹。 經(jīng)常有香客問我,道長隘马,這世上最難降的妖魔是什么太防? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮酸员,結(jié)果婚禮上蜒车,老公的妹妹穿的比我還像新娘讳嘱。我一直安慰自己,他們只是感情好酿愧,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布沥潭。 她就那樣靜靜地躺著,像睡著了一般嬉挡。 火紅的嫁衣襯著肌膚如雪钝鸽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天棘伴,我揣著相機(jī)與錄音寞埠,去河邊找鬼屁置。 笑死焊夸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓝角。 我是一名探鬼主播阱穗,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼使鹅!你這毒婦竟也來了揪阶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤患朱,失蹤者是張志新(化名)和其女友劉穎鲁僚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裁厅,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冰沙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了执虹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓挥。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袋励,靈堂內(nèi)的尸體忽然破棺而出侥啤,到底是詐尸還是另有隱情,我是刑警寧澤茬故,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布盖灸,位于F島的核電站,受9級特大地震影響磺芭,放射性物質(zhì)發(fā)生泄漏糠雨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一徘跪、第九天 我趴在偏房一處隱蔽的房頂上張望甘邀。 院中可真熱鬧琅攘,春花似錦、人聲如沸松邪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗抑。三九已至剧辐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邮府,已是汗流浹背荧关。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留褂傀,地道東北人忍啤。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像仙辟,于是被迫代替她去往敵國和親同波。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • (一)Java部分 1叠国、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,104評論 0 62
  • jstack-- 如果java程序崩潰生成core文件未檩,jstack工具可以用來獲得core文件的java sta...
    not_null閱讀 7,969評論 2 62
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法粟焊,內(nèi)部類的語法冤狡,繼承相關(guān)的語法,異常的語法项棠,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 杜甫的一首《茅屋為秋風(fēng)所破歌》紅遍了大江南北悲雳,成了童叟皆知的流行歌曲,如同當(dāng)年鳥叔的江南style一樣沾乘,很多人...
    云在天上飄閱讀 498評論 0 0
  • 五月黃昏路上來了場癡情的雨 雨不大卻如此纏綿我開了傘路上沉浸在一片久違的寂靜 傘也單薄雨也單薄卻足以飄濕我的眼還有...
    有理性思想的浪漫詩人閱讀 157評論 2 3