<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
jmap histo /pid > ./log.txt :檢視某一程序範例個數,佔用記憶體的位元組數,以及所屬的類
jmap -heap /pid :檢視堆資訊
jmap ‐dump:format=b,file=app.hprof /pid
通過jvisualvm命令啟動jvm視覺化管理介面可匯入dump檔案進行分析:檢視類的範例
分析死鎖:寫一段死鎖程式碼
public class DeadLockTest { private final static Object lock1 = new Object(); private final static Object lock2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { try { System.out.println(Thread.currentThread().getName() + ": get the lock1"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println(Thread.currentThread().getName() + ": get the lock2"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (lock2) { try { System.out.println(Thread.currentThread().getName() + ": get the lock2"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println(Thread.currentThread().getName() + ": get the lock1"); } } } }).start(); } }
"Thread-1" 執行緒名;prio=5 優先順序=5; tid=0x0000000019aa9000執行緒id; nid=0x6c4執行緒對應的本地執行緒標識nid; java.lang.Thread.State: BLOCKED 執行緒狀態
啟動 jvisualvm命令選擇對應的程序即可檢視到死鎖的執行緒
Jstack分析CPU使用率高的執行緒堆疊資訊
啟動一個while迴圈,使CPU一直工作
1、top -p /pid:檢視程序佔用資源情況
顯而易見該程序導致CPU使用率幾乎100%。
2、按H檢視程序內每個執行緒佔用資源的情況
3、找到CPU使用近100%的PID這列,表示執行緒tid為5027,通過轉換器轉為16進位製為13a3,
4、通過jstack命令執行jstack 5026|grep -A 10 13a3,即可得到執行緒tid為13a3的堆疊資訊,進而找到導致CPU佔用100%的執行行號
jinfo -flags /pid :檢視jvm引數
jinfo -sysprops /pid:檢視java的系統引數
jstat -gc /pid:垃圾回收統計
S0C:第一個倖存區的大小,單位KB; S1C:第二個倖存區的大小; S0U:第一個倖存區的使用大小;S1U:第二個倖存區的使用大小; EC:伊甸園區的大小; EU:伊甸園區的使用大小; OC:老年代大小; OU:老年代使用大小; MC:方法區大小(元空間) ;MU:方法區使用大小; CCSC:壓縮類空間大小; CCSU:壓縮類空間使用大小; YGC:年輕代垃圾回收次數; YGCT:年輕代垃圾回收消耗時間,單位s; FGC:老年代垃圾回收次數; FGCT:老年代垃圾回收消耗時間,單位s; GCT:垃圾回收消耗總時間,單位s
jstat -gccapacity/pid: 堆記憶體統計
NGCMN:新生代最小容量;NGCMX:新生代最大容量;NGC:當前新生代容量;S0C:第一個倖存區大小;S1C:第二個倖存區的大小;EC:伊甸園區的大小;OGCMN:老年代最小容量;OGCMX:老年代最大容量;OGC:當前老年代大小;OC:當前老年代大小;MCMN:最小後設資料容量;MCMX:最大後設資料容量;MC:當前後設資料空間大小;CCSMN:最小壓縮類空間大小;CCSMX:最大壓縮類空間大小;CCSC:當前壓縮類空間大小;YGC:年輕代gc次數;FGC:老年代GC次數
jstat -gcnew /pid:檢視新生代垃圾回收統計
TT:物件在新生代存活的次數; MTT:物件在新生代存活的最大次數; DSS:期望的倖存區大小
jstat -gcnewcapacity/pid:檢視新生代記憶體容量
S0CMX:最大幸存1區大小;S1CMX:最大幸存2區大小;ECMX:最大伊甸園區大小
jstat -gcold /pid:檢視老年代垃圾回收統計
jstat -gcoldcapacity/pid:檢視老年代記憶體容量
jstat -gcmetacapacity/pid:檢視後設資料空間統計
通過jstat gc -pid命令可以優化java應用的啟動引數,jstat -gc pid 1000 10 (每隔1秒執行1次命令,共執行10次)預估每秒Eden區會新增多少物件,可根據具體結果調整時間。優化思路其實簡單來說就是儘量讓每次Young GC後的存活物件小於Survivor區域的50%,都留存在年輕代裡。儘量別讓物件進入老年代。儘量減少Full GC的頻率,避免頻繁Full GC對JVM效能的影響。
對於一些老舊的資料,比如jvm級別的記憶體沒有及時清理,導致資料越堆越多,時間長了就會頻繁導致full gc,從而導致記憶體漏失。可以使用成熟快取架構ehcache,他們有實現LRU資料淘汰策略。
到此這篇關於Java JVM虛擬機器器調優詳解的文章就介紹到這了,更多相關Java JVM調優內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45