JVM 调优手段
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
uptime // 查看系統(tǒng)負(fù)載情況,運(yùn)行時(shí)間:7分鐘, 3個(gè)連接數(shù),1,5,15分鐘的系統(tǒng)負(fù)載(運(yùn)行的平均進(jìn)程數(shù):0.8,0.93,0.50)
top // 查看系統(tǒng)IO, CPU 進(jìn)程,內(nèi)存 等所有信息
vmstat? | 4?// 統(tǒng)計(jì)CPU 內(nèi)存 IO 等情況 和 上面類似, cs us 說(shuō)明線程切換多
pidstat?// 用于細(xì)致觀察每一個(gè)進(jìn)程,需要額外安裝
-t // 顯示線程
perfmon // 在windows上 查看各種線程情況,系統(tǒng)自帶的
Process Explorer // 一個(gè)比上面更加強(qiáng)大的東西
jps ?// 顯示所有java相關(guān)進(jìn)程 - m -q -l -v?
jmap // 生成java程序堆快照對(duì)象統(tǒng)計(jì)信息 jmap -histo 2972 >cL/a.txt
? ? jmap -dump:format=b, file=c:\heap.hprod 2972 // 導(dǎo)出堆信息
jstack // 打印線程信息 -l 打印鎖 -m ?打印針信息-F 強(qiáng)制 jstack 120 >> C:\a.txt
JConsole //圖形化監(jiān)控?,最要給線程起一個(gè)好聽的名字 便于拍錯(cuò)
Visual VM // 更加漂亮
?JVM 內(nèi)存: 堆 + 永久區(qū) +線程站+直接內(nèi)存。?
堆溢出:增加X(jué)ms 對(duì)空間大小 or 增加是放內(nèi)存頻率
永久區(qū)溢出:類的數(shù)量太多,例如cglib產(chǎn)生大量類 類的metainfor存在permGen 所以造成溢出,增大永久區(qū)大小 or 設(shè)置允許回收class元數(shù)據(jù)。
Java 棧溢出:堆空間 + 棧空間(線程空間) < 總空間。縮小堆空間,解決。
直接內(nèi)存溢出:ByteBuffer.allocateDirect(1024*1024). 減少堆空間,估計(jì)觸發(fā)GC。
MAT(Memory Analyzer) // 一中分析內(nèi)存Dump的軟件
Shallow Heap: 對(duì)象結(jié)構(gòu)大小,比如String結(jié)構(gòu)大小24個(gè)字節(jié),永遠(yuǎn)不變。
Deep Heap: 對(duì)象的真實(shí)占用內(nèi)存的大小。?
Jmeter // 壓力測(cè)試的一個(gè)工具,MAT發(fā)現(xiàn)一個(gè)ConcurrentHashMap 占內(nèi)存很大,存了太多Session,導(dǎo)致Tomcat OOM. Tomcat 默認(rèn)20分鐘過(guò)期。解決方法: 增加堆大小 縮小Session過(guò)期時(shí)間,
計(jì)算系統(tǒng)并發(fā)壓力:JQL 取得Session列表類似SQL,select s.creationTime from session order by time;
(最后一個(gè)session - 第一個(gè)session) = session 創(chuàng)建的持續(xù)毫秒數(shù)
(最后一個(gè)session - 第一個(gè)session) /1000 = 換算成秒?
訪問(wèn)數(shù) /?(最后一個(gè)session - 第一個(gè)session) /1000 ? = 并發(fā)量
eg: 9941 / ((14646646464-143473747374)/ 1000) = 320次請(qǐng)求/秒
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/Business/blog/979259
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 【HDOJ 5384】Danganron
- 下一篇: BZOJ3627 [JLOI2014]路