亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JVM監控工具介紹jstack, jconsole, jinfo, jmap

系統 1870 0

?




Java 內存泄露監控工具(一) -- JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jsta
2010-03-17 13:20

jstack? -- 如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到 當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。

jconsole? – jconsole是基于 Java ?Management Extensions (JMX)的實時圖形化監測工具,這個工具利用了內建到JVM里面的JMX指令來提供實時的性能和資源的監控,包括了 Java 程序的內存使用,Heap size, 線程的狀態,類的分配狀態和空間使用等等。

jinfo? – jinfo可以從core文件里面知道崩潰的Java應用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。

jmap? – jmap 可以從core文件或進程中獲得內存的具體匹配情況,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。

jdb? – jdb 用來對core文件和正在運行的Java進程進行實時地調試,里面包含了豐富的命令幫助您進行調試,它的功能和Sun studio里面所帶的dbx非常相似,但 jdb是專門用來針對Java應用程序的。

jstat? – jstat利用了JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控等等。

jps? – jps是用來查看JVM里面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。?

jstatd
啟動jvm監控服務。它是一個基于rmi的應用,向遠程機器提供本機jvm應用程序的信息。默認端口1099。
實例:jstatd -J-Djava.security.policy=my.policy

my.policy文件需要自己建立,內如如下:
grant codebase "file:$JAVA_HOME/lib/tools.jar" {
permission java.security.AllPermission;
};
這是安全策略文件,因為jdk對jvm做了jaas的安全檢測,所以我們必須設置一些策略,使得jstatd被允許作網絡操作

上面的操作沒有通過,出現:

Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.System.setProperty(System.java:727)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)

create in your usr/java/bin the jstatd.all.policy file, with the content must be

              
  1. grant?codebase?"file:${java.home}/../lib/tools.jar"?{ ?
  2. permission?java.security.AllPermission; ?
  3. };?


jps
列出所有的jvm實例
實例:
jps
列出本機所有的jvm實例

jps 192.168.0.77
列出遠程服務器192.168.0.77機器所有的jvm實例,采用rmi協議,默認連接端口為1099
(前提是遠程服務器提供jstatd服務)

輸出內容如下:
jones@jones:~/data/ebook/java/j2se/jdk_gc$ jps
6286 Jps
6174? Jstat

jconsole
一個圖形化界面,可以觀察到java進程的gc,class,內存等信息。雖然比較直觀,但是個人還是比較傾向于使用jstat命令(在最后一部分會對jstat作詳細的介紹)。

jinfo (linux下特有)
觀察運行中的java程序的運行環境參數:參數包括Java System屬性和JVM命令行參數
實例:jinfo 2083
其中2083就是java進程id號,可以用jps得到這個id號。
輸出內容太多了,不在這里一一列舉,大家可以自己嘗試這個命令。

jstack (linux下特有)
可以觀察到jvm中當前所有線程的運行情況和線程當前狀態
jstack 2083
輸出內容如下:


jmap (linux下特有,也是很常用的一個命令)
觀察運行中的jvm物理內存的占用情況。
參數如下:
-heap
:打印jvm heap的情況
-histo: 打印jvm heap的直方圖。其輸出信息包括類名,對象數量,對象占用大小。
-histo:live : 同上,但是只答應存活對象的情況
-permstat: 打印permanent generation heap情況

命令使用:
jmap -heap 2083
可以觀察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的內存使用情況
輸出內容:


jmap -histo 2083 | jmap -histo:live 2083
可以觀察heap中所有對象的情況(heap中所有生存的對象的情況)。包括對象數量和所占空間大小。
輸出內容:

寫個腳本,可以很快把占用heap最大的對象找出來,對付內存泄漏特別有效。

jstat
最后要重點介紹下這個命令。
這是jdk命令中比較重要,也是相當實用的一個命令,可以觀察到classloader,compiler,gc相關信息
具體參數如下:
-class:統計class loader行為信息
-compile:統計編譯行為信息
-gc:統計jdk gc時heap信息
-gccapacity:統計不同的generations(不知道怎么翻譯好,包括新生區,老年區,permanent區)相應的heap容量情況
-gccause:統計gc的情況,(同-gcutil)和引起gc的事件
-gcnew:統計gc時,新生代的情況
-gcnewcapacity:統計gc時,新生代heap容量
-gcold:統計gc時,老年區的情況
-gcoldcapacity:統計gc時,老年區heap容量
-gcpermcapacity:統計gc時,permanent區heap容量
-gcutil:統計gc時,heap情況
-printcompilation:不知道干什么的,一直沒用過。

一般比較常用的幾個參數是:
jstat -class 2083 1000 10 (每隔1秒監控一次,一共做10次)
輸出內容含義如下:

Loaded Number of classes loaded.
Bytes Number of Kbytes loaded.
Unloaded Number of classes unloaded.
Bytes Number of Kbytes unloaded.
Time Time spent performing class load and unload operations.








jstat -gc 2083 2000 20(每隔2秒監控一次,共做10)
輸出內容含義如下:
S0C Current survivor space 0 capacity (KB).
EC Current eden space capacity (KB).
EU Eden space utilization (KB).
OC Current old space capacity (KB).
OU Old space utilization (KB).
PC Current permanent space capacity (KB).
PU Permanent space utilization (KB).
YGC Number of young generation GC Events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.




















輸出內容:


如果能熟練運用這些命令,尤其是在linux下,那么完全可以代替jprofile等監控工具了,誰讓它收費呢。呵呵。
用命令的好處就是速度快,并且輔助于其他命令,比如grep gawk sed等,可以組裝多種符合自己需求的工具。

u ?????????????? jps 的用法

用來查看 JVM 里面所有進程的具體狀態 ,? 包括進程 ID ,進程啟動的路徑等等。 unix 上的 ps 類似,用來顯示本地的 java 進程,可以查看本地運行著幾個 java 程序,并顯示他們的進程號。

?

[root@localhost ~]# jps

25517 Jps

25444 Bootstrap

?

?

?

linux查看進程的線程信息
2011-07-28 18:46

查看Java的線程

1、用ps -eLf | grep java | wc 查看系統里運行的java線程數
2、用top H可以按線程排序CPU和內存的占用及相應的線程ID
3、用killall -3 (unix only) 或 jstack -l 可以Dump出Java的線程,然后根據線程ID(轉換成16進制后對應thread dump的nid)查看線程的堆棧

?

linux查看進程對應的線程信息

ps -Lf pid

?

查看進程對應線程個數

ps -Lf pid|wc

?

對于java程序也可以通過jvisualvm查看

?

其他:

查看最大線程數

max user processes (-u) 10111

?

查看最大進程數:

cat?/proc/sys/kernel/threads-max

?

?

http://hi.baidu.com/mengxiangjava/blog/item/70556453cd40b1838d543038.html JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jsta

?

JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jsta


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品国产一区二区三区肥胖 | 中国美女一级a毛片录像在线 | 国产99视频精品一区 | 欧美一级a俄罗斯毛片 | 99久久国产免费中文无字幕 | 国产成人亚洲精品一区二区在线看 | 久草免费在线观看 | 色婷婷中文字幕 | 亚洲啪啪看看 | 伊人爱爱网 | 精品欧美成人bd高清在线观看 | 中文字幕在线最新在线不卡 | 日本aaaa视频 | 青青久在线精品视频 | a在线观看视频 | 亚洲综合网在线 | 国产亚洲精品久久久久久久软件 | 成人影院一区二区三区 | 九九精品成人免费国产片 | 婷婷五 在线播放 | 色艺网| 91麻豆精品国产91久久久久 | 99热成人精品免费久久 | 国产免费私人影院永久免费 | 国产成人无精品久久久久国语 | 一级毛片免费一级直接观看 | 一区二区在线视频 | 女人一级毛片免费观看 | 国产精品麻豆久久久 | 无遮挡一级毛片视频 | 欧美一区二区影院 | 在线观看久草 | 黄色毛片免费观看 | 中文字幕有码在线观看 | 热久久99影院 | 国产精品综合网 | 爱爱视频在线免费观看 | 黑人特级粗α级毛片 | 999国产精品 | 国产成人精品日本亚洲语言 | 久久青草91免费观看 |