摘要:引曾幾何時這句話總是在你的程序中出現(xiàn),新手到是什么問題后就去改了內(nèi)存大小還總是分不清楚,想的是總之設(shè)大點我就看不到這個錯誤了。稍微有點經(jīng)驗的會翻翻看看什么地方會出現(xiàn)內(nèi)存泄露,當(dāng)然也會改參數(shù),但會有節(jié)制的改了。
引
曾幾何時java.lang.OutOfMemoryError: Java heap space這句話總是在你的程序中出現(xiàn),新手search到是什么問題后就去改了內(nèi)存大小還總是分不清楚Xms Xmx PermSize MaxNewSize,想的是“總之設(shè)大點我就看不到這個錯誤了”。稍微有點經(jīng)驗的會翻翻code看看什么地方會出現(xiàn)內(nèi)存泄露,當(dāng)然也會改參數(shù),但會有節(jié)制的改了。老鳥會使用工具來分析到底是哪里造成了泄露?是code的問題還是內(nèi)存真的配置不夠?
項目做完后功能測試通過了,拿到客戶那里跑了沒幾天發(fā)現(xiàn)不處理東西了,java傻掉了讓它干什么都不動,真不聽話!于是細(xì)細(xì)的看log發(fā)現(xiàn)了java.lang.OutOfMemoryError: Java heap space。性能測試呢?忽略了嗎?
顯有人也許覺得OM不是多大的事,如果這么想就錯了!
一個項目從設(shè)計、開發(fā)、測試、發(fā)布,這中間經(jīng)歷了多少風(fēng)雨相信有經(jīng)歷的朋友肯定不會忘記多少個不眠之夜伴隨著你走完了一個項目周期,自以為把一個精美的產(chǎn)品賣給了客戶,可誰知道這里面竟然有一個潛伏很深的炸彈!說不定什么時候就會出現(xiàn)炸你一下,讓你手忙腳亂的去找問題點。趕上不能遠(yuǎn)程連接的,還要去客戶那里解決,管理嚴(yán)格的甚至你帶進(jìn)去的筆記本都要貼封條所有接口全封,不能聯(lián)網(wǎng),試想身臨其境下,在一個機(jī)房孤單的去找OM源頭是什么感受?
Function監(jiān)控工具:
推薦使用visualvm來監(jiān)控jvm的內(nèi)存使用情況。
既然是要分析jvm,那么肯定得連接了,visualvm連接jvm有2種方式
在jvm啟動的參數(shù)中加入-Dcom.sun.management.jmxremote.port=端口號,jmx連接方式
在jdk/bin/執(zhí)行cp ../jre/lib/security/java.policy ./ 修改java.policy
grant codeBase "file:{java.home}/../lib/tools.jar"
再啟動jstatd
./jstatd -J-Djava.security.policy=java.policy -J-Djava.rmi.server.hostname=IP
這種是jstatd連接方式
分析dump工具:IBM HeapAnalyzer,分析jvm dump出的文件來看具體是哪里可能存在泄露問題
jdk自帶分析工具:jmap,jstat,jconsole,jps
線程分析:
不知道有沒有碰到這種問題的,看top cpu占用發(fā)現(xiàn)奇高不下,可現(xiàn)在應(yīng)該什么都沒干啊,這是怎么回事?什么東西在瘋狂的做事還不讓我知道?往往這時候好多人只能止步了,因為不知道怎么去追查到底是誰在占用cpu。
先使用top確定你要分析的java進(jìn)程pid,如:5683
使用jstack導(dǎo)出java的線程列表,如:jstack -l 5683 > 5683.stack
再使用top -H -p PID命令查看java進(jìn)程里的子線程的實際占用,記錄id后和導(dǎo)出的stack文件比對,就能知道具體的是哪里占用
以上提到的每一種工具,大家都能搜到很詳細(xì)的使用說明,這里就不寫了省得有騙字?jǐn)?shù)之嫌。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65295.html
摘要:對此沒有任何限制,它不關(guān)心這個。一種控制變化的辦法是不可改變的,持久化的數(shù)據(jù)結(jié)構(gòu)。總結(jié)檢測變化時開發(fā)中的核心問題,而框架們以各種方式解決這個問題。因為組件內(nèi)的變化是不被允許的。 AngularJS:臟檢查 我不知道什么更新了,所以當(dāng)更新的時候,我只能檢查所有的東西。 AngularJS 類似于 Ember,當(dāng)狀態(tài)改變的時候,必須人工去處理。但不同的是,AngularJS 從不同的角度來...
摘要:今天,你的瀏覽器滾動了嗎序在頁面中,一個有高度或者寬度的容器是最常見的構(gòu)成元素,而在其中的子元素有很大的概率超過父容器的尺寸限制,我們稱之為溢出。 今天,你的瀏覽器 滾動 了嗎? 序 在 Web 頁面中,一個有高度或者寬度的容器是最常見的構(gòu)成元素,而在其中的子元素有很大的概率超過父容器的尺寸限制,我們稱之為溢出。而應(yīng)對溢出,隱藏或者滾動是最常見的處理方式。滾動,作為 FEers 最經(jīng)常...
摘要:今天,你的瀏覽器滾動了嗎序在頁面中,一個有高度或者寬度的容器是最常見的構(gòu)成元素,而在其中的子元素有很大的概率超過父容器的尺寸限制,我們稱之為溢出。 今天,你的瀏覽器 滾動 了嗎? 序 在 Web 頁面中,一個有高度或者寬度的容器是最常見的構(gòu)成元素,而在其中的子元素有很大的概率超過父容器的尺寸限制,我們稱之為溢出。而應(yīng)對溢出,隱藏或者滾動是最常見的處理方式。滾動,作為 FEers 最經(jīng)常...
摘要:優(yōu)點是反序列化時不需要提供類型信息,但缺點是序列化后的結(jié)果非常龐大,是格式的倍左右,這樣就會消耗服務(wù)器的大量內(nèi)存。使用庫將對象序列化為字符串。優(yōu)點是速度快,序列化后的字符串短小精悍。 需要的jar包:spring版本:4.3.6.RELEASE,jedis版本:2.9.0,spring-data-redis:1.8.0.RELEASE;如果使用jackson序列化的話還額外需要:jac...
摘要:目前為止,這個命名已經(jīng)可以打分,離滿分存在的差距在哪里如果一律采取駝峰命名,在從屬關(guān)系的可讀性上,稍微差了一點,來比較一下這兩個命名的可讀性和明顯采取駝峰匈牙利命名的方式可讀性更強(qiáng)。 前言 為什么我剛才寫的樣式亂了?! 如何給變量,文件命名是程序員的老大難問題。命名為什么會這么難,因為它太重要了??梢赃@么說,準(zhǔn)確的命名可以提高代碼的可讀性,讓人容易理解,方便調(diào)試,也給以后修改和維護(hù)你的...
閱讀 1099·2021-11-25 09:43
閱讀 721·2021-11-22 14:45
閱讀 3853·2021-09-30 09:48
閱讀 1090·2021-08-31 09:41
閱讀 1992·2019-08-30 13:52
閱讀 2004·2019-08-30 11:24
閱讀 1368·2019-08-30 11:07
閱讀 976·2019-08-29 12:15