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