最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

JVM調(diào)優(yōu)工具介紹(2)

2023-06-27 23:21 作者:驛路梅花帶雪看2  | 我要投稿

對大多數(shù)java開發(fā)從業(yè)人員來說,對jvm進(jìn)行調(diào)優(yōu)是許多java開發(fā)人員必然碰到的難題。工欲善其事必先利其器,給系統(tǒng)定位,知識(shí)、經(jīng)驗(yàn)是關(guān)鍵,但同樣選擇一款趁手適合的工具同樣重要!現(xiàn)在我們繼續(xù)上篇介紹一些jvm調(diào)優(yōu)工具。

1、 jinfo:java配置信息工具

jinfo的作用是實(shí)時(shí)查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù),使用jps -v命令可以查看虛擬機(jī)啟動(dòng)時(shí)顯式指定的參數(shù)列表,如下圖所示:

jps -v

jps -v查看jvm參數(shù)

但是如果想知道未被顯式指定的參數(shù)系統(tǒng)的默認(rèn)值,除了去查找資料之外,就只能使用jinfo -flag命令查詢了(JDK6版本或者以上也可以使用java -XX:+PrintFlagsFinal查看參數(shù)的默認(rèn)值)。jinfo -sysprops命令還可以將虛擬機(jī)的System.getProperties()中的參數(shù)打印出來,這個(gè)命令是在jdk5時(shí)linux版本發(fā)布的,但是當(dāng)時(shí)只提供了查詢的功能。jinfo -flag命令、java -XX:+PrintFlagsFinal、jinfo -sysprops命令分別如下圖所示:

jinfo

jinfo -flag查看具體參數(shù)

jinfo

java -XX:+PrintFlagsFinal查看參數(shù)

java -XX:+PrintFlagsFinal

jinfo -sysprops查看jvm參數(shù)

jdk6之后,jinfo在windows平臺(tái)和linux平臺(tái)都有提供,并且加入了運(yùn)行期修改部分參數(shù)的能力(可以使用-flag [+|-]name或者 -flag name=true在運(yùn)行期修改一部分運(yùn)行期可寫的虛擬機(jī)參數(shù)值)。但在windows平臺(tái),jdk6提供的功能仍然有較大限制,只提供了最基本的-flag選項(xiàng)。jinfo命令的基本格式如下:

jinfo {options} pid

舉個(gè)例子,查看CMSInitiatingOccupancyFraction參數(shù)值:

jinfo -flag CMSInitiatingOccupancyFraction

jinfo -flag查看CMSInitiatingOccupancyFraction參數(shù)值

特別聲明有些jinfo命令是不需要屬性值的,比如jinfo -sysprops:

jinfo -sysprops

jinfo -sysprops查看system.getProperties()參數(shù)

2、 jmap:java內(nèi)存映像工具

jmap(Memory Map of java)是用于生成堆轉(zhuǎn)儲(chǔ)快照(一般稱之為heapdump或者dump文件),如果不使用jmap命令,要想獲取java堆轉(zhuǎn)儲(chǔ)快照一般的使用一些比較"暴力"的方式。比如說使用命令:-XX:+HeapDumpOnOutOfMemoryError,也可以讓虛擬機(jī)在出現(xiàn)內(nèi)存溢出異常后自動(dòng)生成堆轉(zhuǎn)儲(chǔ)快照文件,通過-XX:+HeapDumpOnCtrlBreak參數(shù)則可以使用ctrl+break鍵讓虛擬機(jī)生成堆轉(zhuǎn)儲(chǔ)快照文件,又或者在linux系統(tǒng)下通過Kill -3命令發(fā)出進(jìn)程退出信號(hào),"恐嚇"一下虛擬機(jī)也能順利拿到堆轉(zhuǎn)儲(chǔ)快照。

-XX:+HeapDumpOnOutOfMemoryError

idea設(shè)置-XX:+HeapDumpOnOutOfMemoryError參數(shù)

-XX:+HeapDumpOnOutOfMemoryError

idea設(shè)置-XX:+HeapDumpOnCtrlBreak參數(shù)

jmap的作用不僅僅是用于獲取堆轉(zhuǎn)儲(chǔ)快照,它還可以查詢finalize執(zhí)行隊(duì)列,java堆和方法區(qū)的詳細(xì)信息,如空間使用率、當(dāng)前使用的是哪種垃圾收集器等。jmap的命令格式如下:

jmap [option] vmid(vmid表示虛擬機(jī)進(jìn)程)

option的合法值和具體含義如下所示:

選項(xiàng)

作用

-dump

生成java堆轉(zhuǎn)儲(chǔ)快照,格式為-dump:[live.]fromat=b.file=,其中l(wèi)ive參數(shù)說明是否只dump出存活的對象。

-finalizerinfo

顯示在F-Queue隊(duì)列中等待finalizer線程執(zhí)行finalize方法的對象。只在linux或者solaris平臺(tái)有效。

-heap

顯示java堆詳細(xì)信息,如使用了哪種回收器、參數(shù)配置、分代情況等,只在linux或者solaris平臺(tái)有效。

-histo

顯示堆中對象統(tǒng)計(jì)信息,包括類、實(shí)例數(shù)量、合計(jì)容量。

-permstat

以ClassLoader為統(tǒng)計(jì)口徑顯示永久代內(nèi)存狀態(tài),只在linux或者solaris平臺(tái)有效。

-F

當(dāng)虛擬機(jī)進(jìn)程對-dump選項(xiàng)沒有響應(yīng)時(shí),可以使用這個(gè)選項(xiàng)強(qiáng)制生成dump快照,只在linux或者solaris平臺(tái)有效。

參數(shù)在windows平臺(tái)示例如下:

-dump

jmap -dump命令

jmap -dump

jmap -histo命令

但是dump下來的文件是無法直接打開的,打開會(huì)亂碼,因此我們要用到另外一個(gè)工具jhat來分析分析dump文件。

jmap -histo

dump文件直接打開亂碼

3、 jhat:虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具

jdk提供了jhat(jvm Heap Analysis Tool)命令和jmap搭配使用,來分析jmap生成的堆轉(zhuǎn)儲(chǔ)快照。jhat內(nèi)部內(nèi)置了一個(gè)小型的http/web服務(wù)器,生成堆轉(zhuǎn)儲(chǔ)快照之后可以在瀏覽器中查看。不過在實(shí)際工作中,除非手頭沒有其他的工具,否則多數(shù)人是不會(huì)直接使用jhat命令來分析堆轉(zhuǎn)儲(chǔ)快照的。主要原因有兩方面:1、不會(huì)在部署應(yīng)用的服務(wù)器上直接分析堆轉(zhuǎn)儲(chǔ)快照,即使可以這樣做,也會(huì)盡量將堆轉(zhuǎn)儲(chǔ)快照文件復(fù)制到其他機(jī)器上分析,因?yàn)榉治隹煺瘴募且粋€(gè)非常耗費(fèi)時(shí)間和硬件資源的過程。既然都在其他機(jī)器上進(jìn)行了,就沒必要再受到命令行工具的限制了,另外一個(gè)原因是jhat分析工具比較簡陋,后文會(huì)介紹VisualVM以及專門用于分析快照文件的Eclipse Memory Analyzer、IBM HeapAnalyzer等工具,都能實(shí)現(xiàn)比jhat更強(qiáng)大的分析功能,代碼如下演示了前面jmap生成的堆轉(zhuǎn)儲(chǔ)快照文件:

jhat

jhat分析dump下來的文件

分析結(jié)果在瀏覽器中所示:http://locahost:7000/

http://locahost:7000/

瀏覽器中查看jhat分析結(jié)果

分析結(jié)果是以包為單位進(jìn)行分組顯示,分析內(nèi)存泄露問題主要會(huì)使用到其中的"Heap Histogram"(與jmap -histo功能一樣)與OQL頁簽的功能,前者可以找到內(nèi)存中總?cè)萘孔畲蟮膶ο?,后者是?biāo)準(zhǔn)的對象查詢語言,使用類似SQL的語法對內(nèi)存中的對象進(jìn)行查詢統(tǒng)計(jì),如果讀者需要了解具體OQL的語法和標(biāo)準(zhǔn)使用方法,詳見《深入理解java虛擬機(jī)·jvm高級特性和最佳實(shí)踐》第三版附錄D的內(nèi)容。



JVM調(diào)優(yōu)工具介紹(2)的評論 (共 條)

分享到微博請遵守國家法律
汝州市| 堆龙德庆县| 松桃| 资阳市| 时尚| 成都市| 焦作市| 来宾市| 浙江省| 平塘县| 会东县| 大名县| 革吉县| 贺州市| 方山县| 泰宁县| 常州市| 荥阳市| 耒阳市| 禹州市| 汉阴县| 邢台市| 东城区| 介休市| 庆城县| 抚远县| 手游| 高安市| 皮山县| 墨竹工卡县| 那曲县| 望江县| 高要市| 沂南县| 和静县| 武清区| 女性| 郸城县| 怀化市| 闸北区| 周至县|