自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于Java性能監(jiān)控的一些記錄

開發(fā) 后端
本篇所有內(nèi)容都是基于JDK5,如使用JDK6會有差別。在前些日子,我們做了一些性能監(jiān)控的工作,有一些值得記錄的地方:JDK自身提供了很多工具,基于命令行和GUI的都有,學(xué)會合理應(yīng)用它們是很有用處的。

本篇所有內(nèi)容都是基于JDK5,如使用JDK6會有差別。

在前些日子,我們做了一些性能監(jiān)控的工作,有一些值得記錄的地方:

JDK自身提供了很多工具,基于命令行和GUI的都有,學(xué)會合理應(yīng)用它們是很有用處的。

首先是jmap,這是一個命令行程序,用來查看JVM中對象數(shù)量情況,直接輸入jmap會顯示用法,下面是兩個常用的功能:

Java代碼

 

 

  1. jmap -histo 'jvmPid' > memory.txt   

 

其中jvmPid為當前虛擬機進程的系統(tǒng)ID號,等待過后,memory.txt會按空間占用由大到小的順序保存當前虛擬機運行中存在的對象類型,我們可以由此看出哪些類型對象占的空間和生成的數(shù)目較多,尤其是在自定義對象出現(xiàn)問題導(dǎo)致不能及時回收,這個功能是很有用的。

Java代碼

 

 

  1. jmap -heap:format=b 'jvmPid'   

 

和上面的不同,上面是生成一個文本文件,而這里會生成一個二進制快照文件,可以用相應(yīng)的分析軟件來打開它來進行功能更全面的檢測,如Eclipse Memory Analyzer。

需要注意的是,上面的導(dǎo)出快照命令,在1G左右JVM內(nèi)存的情況下,要大概等待1分鐘左右的時間,且執(zhí)行時會使JVM暫停執(zhí)行,因此不要在正式運行系統(tǒng)的高峰期或關(guān)鍵時刻使用。

接下來是jstat,這也是一個命令行程序,用來查看JVM的各個內(nèi)存和GC的使用情況,用法和參數(shù)非常多,有兩個我們用到的功能:

Java代碼

 

 

  1. jstat -gcutil 'jvmPid'   

 

會顯示此刻GC的情況,其中YGC和FGC代表小GC和大GC的次數(shù),YGCT和FGCT則代表小GC和大GC運行的占用時間,正常情況下,大GC的次數(shù)應(yīng)遠遠小于小GC,例如我當前的系統(tǒng)小GC已經(jīng)有10w次,而大GC只有50次,這是程序設(shè)計運行良好的表現(xiàn)。

Java代碼

  1. jstat -gccapacity 'jvmPid'   

會顯示此刻GC各內(nèi)存池占用量,和上條命令結(jié)果結(jié)構(gòu)類似,同時也有一個問題,顯示的數(shù)據(jù)不是很直觀,如果通過GUI觀看就好多了。

JVM自帶了GUI監(jiān)控狀態(tài)的功能,在JDK5中,我們需要做一些配置手動開啟它,首先我們要在JVM啟動項增加一些屬性,假設(shè)我們的系統(tǒng)是一個運行在tomcat容器下的項目,我們就可以修改JAVA_OPTS變量來開啟監(jiān)控服務(wù)

Java代碼

 

 

  1. JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false"    

 

這將開啟遠程基于jmx監(jiān)控的服務(wù)功能,這樣的配置方式,同時也開啟了默認的身份驗證機制,我們還需要在另外的地方設(shè)置權(quán)限,用戶名和密碼才能登錄,我們先把這些服務(wù)端剩下的工作擱置一旁,先說說客戶端的部分。

我們需要GUI客戶端訪問工具來遠程查看該虛擬機的信息,JDK5自帶了一個名為jconsole的客戶端,可以在JDK目錄的bin文件夾下找到它并可以直接雙擊運行,點擊“遠程”標簽,之后輸入遠程IP,端口,用戶名和密碼,如服務(wù)端配置正常,即可成功訪問。

回到服務(wù)端上來,我們還需要配置JVM的遠程用戶名和密碼,這個要修改$JAVA_HOME/jre/lib/management/jmxremote.access和jmxremote.password.template文件。

首先直接修改jmxremote.access文件,取消***兩個用戶名的注釋,改為

Java代碼

 

 

  1. monitorRole   readonly     
  2. controlRole   readwrite \     
  3.               create javax.management.monitor.*,javax.management.timer.* \     
  4.               unregister    

 

這兩個用戶的區(qū)別顯而易見,你取消一個當然也可以。

然后修改jmxremote.password.template的文件名,將其改成jmxremote.password,之后同樣編輯***兩行用戶,將密碼改成你想要的,很簡單吧。

之后還要做一步,將jmxremote.password文件的權(quán)限改為可讀可寫

Java代碼

 

  1. chmod 600 $JAVA_HOME/jre/lib/management/jmxremote.password   

至此,還有***一點需要注意,要將/etc/hosts文件中127.0.0.1修改成你真正的外網(wǎng)IP,如210.209.83.37,并且運行hostname -i命令返回的IP也應(yīng)該是210.209.83.37才可以,每次修改完上述文件,要重新啟動JVM,監(jiān)控服務(wù)才會生效。

大功告成,開啟JVM以后,我們可以運行jconsole客戶端,輸入IP端口,用戶名和密碼,用戶名為monitorRole或controlRole或你自定義的(權(quán)限不同)。

也可以免去用戶驗證部分,只需要再加入-Dcom.sun.management.jmxremote.authenticate=false即可,也可以通過修改com.sun.management.jmxremote.password.file和com.sun.management.jmxremote.access.file自定義權(quán)限文件和密碼文件的位置,不過這也沒有什么太大必要。

成功登錄后,因為是GUI界面,所有信息可以很直觀的被我們所學(xué)習(xí)和接受,但還需要我們具備一些JVM的知識,尤其是GC方面,有機會的話,會在以后的文檔中繼續(xù)說明。

【編輯推薦】

  1. 巧解IBM JVM for Linux onPOWER性能調(diào)優(yōu)
  2. 海量數(shù)據(jù)存儲之新存儲設(shè)備性能優(yōu)化
  3. 探究JVM1.6與JVM1.5性能差距
  4. 數(shù)據(jù)庫中海量文件的批量轉(zhuǎn)移方法
  5. 海量監(jiān)控的現(xiàn)狀及發(fā)展趨勢研究
責(zé)任編輯:金賀 來源: JavaEye博客
相關(guān)推薦

2021-06-10 10:02:19

優(yōu)化緩存性能

2009-06-18 09:51:25

Java繼承

2012-09-25 10:03:56

JavaJava封面Java開發(fā)

2011-07-13 09:13:56

Android設(shè)計

2021-02-06 14:25:29

Java延遲加載代碼

2013-04-07 10:40:55

前端框架前端

2011-08-31 10:54:25

Java性能

2017-04-08 17:12:36

設(shè)計模式抽象策略模式

2017-09-05 09:17:47

Java編程用法總結(jié)

2009-06-04 16:28:43

EJB常見問題

2012-04-19 10:06:55

微軟Windows 8 E

2015-12-04 10:04:53

2020-09-28 06:45:42

故障復(fù)盤修復(fù)

2022-04-14 10:22:44

故事卡業(yè)務(wù)

2017-12-21 07:54:07

2020-05-19 14:35:42

Shell腳本循環(huán)

2017-09-20 15:07:32

數(shù)據(jù)庫SQL注入技巧分享

2016-10-18 22:10:02

HTTP推送HTML

2009-06-18 10:53:52

Hibernate3.

2018-07-30 08:41:48

VueReact區(qū)別
點贊
收藏

51CTO技術(shù)棧公眾號