免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

JVM性能調(diào)優(yōu)監(jiān)控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解

:2019年10月10日 IT牧場
分享到:

?這些問題在日常開發(fā)、維護中可能被很多人忽視(比如有的人遇到上面的問題只是重啟服務器或者調(diào)大內(nèi)存,而不會深究問題根源),但能夠理解并解決這些問題是Java程序員進階的必備要求。本文將對一些常用...

現(xiàn)實企業(yè)級Java應用開發(fā)、維護中,有時候我們會碰到下面這些問題:
  • OutOfMemoryError,內(nèi)存不足

  • 內(nèi)存泄露

  • 線程死鎖

  • 鎖爭用(Lock Contention)

  • Java進程消耗CPU過高

  • ......

這些問題在日常開發(fā)、維護中可能被很多人忽視(比如有的人遇到上面的問題只是重啟服務器或者調(diào)大內(nèi)存,而不會深究問題根源),但能夠理解并解決這些問題是Java程序員進階的必備要求。本文將對一些常用的JVM性能調(diào)優(yōu)監(jiān)控工具進行介紹,希望能起拋磚引玉之用。

而且這些監(jiān)控、調(diào)優(yōu)工具的使用,無論你是運維、開發(fā)、測試,都是必須掌握的。

A、 jps(Java Virtual Machine Process Status Tool)      

    jps主要用來輸出JVM中運行的進程狀態(tài)信息。語法格式如下:

jps [options] [hostid]

    如果不指定hostid就默認為當前主機或服務器。

    命令行參數(shù)選項說明如下:

-q 不輸出類名、Jar名和傳入main方法的參數(shù)
-m 輸出傳入main方法的參數(shù)
-l 輸出main類或Jar的全限名
-v 輸出傳入JVM的參數(shù)

   比如下面:

root@ubuntu:/# jps -m -l
2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml
29920 com.sun.tools.hat.Main -port 9998 /tmp/dump.dat
3149 org.apache.catalina.startup.Bootstrap start
30972 sun.tools.jps.Jps -m -l
8247 org.apache.catalina.startup.Bootstrap start
25687 com.sun.tools.hat.Main -port 9999 dump.dat
21711 mrf-center.jar

B、 jstack

    jstack主要用來查看某個Java進程內(nèi)的線程堆棧信息。語法格式如下:

jstack [option] pid
jstack
 [option] executable core
jstack
 [option] [server-id@]remote-hostname-or-ip

    命令行參數(shù)選項說明如下:

-l long listings,會打印出額外的鎖信息,在發(fā)生死鎖時可以用jstack -l pid來觀察鎖持有情況-m mixed mode,不僅會輸出Java堆棧信息,還會輸出C/C++堆棧信息(比如Native方法)

    jstack可以定位到線程堆棧,根據(jù)堆棧信息我們可以定位到具體代碼,所以它在JVM性能調(diào)優(yōu)中使用得非常多。下面我們來一個實例找出某個Java進程中最耗費CPU的Java線程并定位堆棧信息,用到的命令有ps、top、printf、jstack、grep。

    第一步先找出Java進程ID,我部署在服務器上的Java應用名稱為mrf-center:

root@ubuntu:/# ps -ef | grep mrf-center | grep -v greproot     21711     1  1 14:47 pts/3    00:02:10 java -jar mrf-center.jar

    得到進程ID為21711,第二步找出該進程內(nèi)最耗費CPU的線程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我這里用第三個,輸出如下:

1.jpg

    TIME列就是各個Java線程耗費的CPU時間,CPU時間最長的是線程ID為21742的線程,用

printf "%x\n" 21742

    得到21742的十六進制值為54ee,下面會用到。   

    OK,下一步終于輪到jstack上場了,它用來輸出進程21711的堆棧信息,然后根據(jù)線程ID的十六進制值grep,如下:

root@ubuntu:/# jstack 21711 | grep 54ee"PollIntervalRetrySchedulerThread" prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait() [0x00007f94c6eda000]

可以看到CPU消耗在PollIntervalRetrySchedulerThread這個類的Object.wait(),我找了下我的代碼,定位到下面的代碼:

// Idle waitgetLog().info("Thread [" + getName() + "] is idle waiting...");
schedulerThreadState = PollTaskSchedulerThreadState.IdleWaiting;
long now = System.currentTimeMillis();
long waitTime = now + getIdleWaitTime();
long timeUntilContinue = waitTime - now;
synchronized(sigLock) { try {
     if(!halted.get()) {
     sigLock.wait(timeUntilContinue);
     }
    }  catch (InterruptedException ignore) {
    }
}

它是輪詢?nèi)蝿盏目臻e等待代碼,上面的sigLock.wait(timeUntilContinue)就對應了前面的Object.wait()。

[我要糾錯]
[ 編輯:王振袢 &發(fā)表于江蘇 ]
關鍵詞: 現(xiàn)實 企業(yè)級 Java 應用開發(fā) 維護

來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權或非授權發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

您在閱讀:JVM性能調(diào)優(yōu)監(jiān)控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網(wǎng)絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統(tǒng)計

主站蜘蛛池模板: 久久777国产线看是看精品 | 国产日韩欧美中文字幕 | 精品女同一区二区三区免费播放 | 中文毛片无遮挡高清免费 | 欧美日韩在线成人看片a | 五月天激情婷婷婷久久 | 成人在色线视频在线观看免费大全 | 精品久久九九 | 国产精品密蕾丝视频 | 亚洲欧美日韩在线中文一 | 国产一极毛片 | 国产精品久久久尹人香蕉 | 中文字幕日韩欧美一区二区三区 | 国内不卡1区2区 | 国产在线综合视频 | 久爱精品视频在线视频 | 麻豆精品国产剧情在线观看 | 国产成人精品视频免费大全 | 一级一级一片免费 | 羞色影院 | 午夜影院操一 | 免费看一级a一片毛片 | 国产久爱青草视频在线观看 | 国产草逼视频 | 国产a级特黄的片子视频 | 91在线视频观看 | 无遮羞肉动漫在线观看免费 | 四虎永久在线精品波多野结衣 | 亚洲区精品 | 亚洲v天堂| 黄色高清视频在线观看 | 中文字幕亚洲综合精品一区 | 国久久| 97久久精品人人做人人爽 | 欧美一级欧美三级在线 | 天天综合天天 | 免费看黄网站大全 | 曰批全过程免费视频免费看 | 日韩一区二区三区视频 | 可以免费观看一级毛片黄a 可以免费观看的一级毛片 可以免费观看的黄色网址 可以看的黄色网址 | 毛片a区|
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價格低
  • 蘋果原裝手機殼