導航:首頁 > 程序命令 > jvm監控命令

jvm監控命令

發布時間:2022-04-28 10:38:46

㈠ 有什麼工具能監控java項目運行中,各個class,function,sql的執行效率,使用次數

監控java的話,可以到jdk,bin目錄下有很多監控管理工具,sql的話,可以通過show processlist(mysql)命令來查看正在運行的線程,正在執行的sql

㈡ 用jconsole監控jvm 怎麼指定遠程監控埠

JConsole是一個基於JMX的GUI工具,用於連接正在運行的JVM。可以監控本地和遠程的java程序。 Jconsole 可以監視本地Tomcat和遠程伺服器上的Tomcat 監視前需要做如下配置: 1、如果要監視遠程Java進程,需要在遠程伺服器上做相應的設置 1)windows...

㈢ 如何對AIX系統下的JVM里的jar包進行內存監測

使用Java自帶的VisualVM監控遠程主機JVM內存使用情況
下面是使用JXM協議配置的簡單的操作步驟,詳細內容可以閱讀文章後的參考資料。
1.遠程主機
(1)修改JMX服務的配置文件:
在JDK的根目錄/jre/lib/management中,將jmxremote.password.template另存為jmxremote.password。
用文件編輯軟體按編輯jmxremote.password去掉
# monitorRole QED
# controlRole R&D
前面的#注釋,保存。
如果當前系統屬於AIX、linux或者Solaris系統還需要更改jmxremote.access和jmxremote.password的許可權
為只讀寫,命令如下
chmod 600 jmxremote.access jmxremote.password

(2)修改JVM的啟動配置信息:

Windows系統
set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=<hostname>
-Dcom.sun.management.jmxremote.ssl=false

AIX、Linux或者Solaris
export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=<hostname>
-Dcom.sun.management.jmxremote.ssl=false"
例如:
set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.24
-Dcom.sun.management.jmxremote.ssl=false

配置的說明如下:
-Dcom.sun.management.jmxremote.port 遠程主機埠號的
-Dcom.sun.management.jmxremote.ssl=false 是否使用SSL連接
-Dcom.sun.management.jmxremote.authenticate=false 是否開啟遠程服務許可權
-Djava.rmi.server.hostname 遠程主機名,使用IP地址

(3)重啟服務。

2.本地主機配置
方法一、
進入<JDK_HOME>\bin目錄,啟動JConsole命令行工具。在JConsole的新連接中添加運程計算機信息。
<hostname>:<port>或者service:jmx:<protocol>:<sap>
例如:192.168.1.24:1099或者service:jmx:rmi:///jndi/rmi://192.168.1.24:1099
<hostname> 檢測伺服器IP地址
<port> 運程主機埠
方法二、
JDK 1.6以上版本包含了一個簡單版本的jvisualvm.exe。在Remote上右鍵菜單中選擇Add Remote host,輸入運程計算機Host name,實際上就是要檢測的遠程計算機IP地址。在配置好的遠程主機上右鍵選擇Add JMX Connection...,按照方法一中要求的格式輸入,遠程主機信息。

㈣ 怎麼運用JMX遠程監控,管理JVM

如果你跑的就是一個簡單的Java程序:
1、假如跑在本地,只需要在運行程序是加上 -Dcom.sun.management.jmxremote
2、假如跑在遠程,則要加上-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-----當然你還可以加其它配置,譬如用戶名和密碼-------

假設你的程序跑在容器(譬如說你提到的tomcat),那麼一定有個配置文件會讓你加上以上的這些配置,對tomcat來講,就是
CATALINA_HOME/bin目錄下的catalina.bat 或catalina.sh,在JAVA_OPTS那行中加上以上第二點的配置

簡單來講,加上這些配置,你的程序就可以使用JMX來監控,即你的程序向外部暴露了JMX介面。

㈤ linux怎麼監控 jvm內存 jstat

jstat
可以觀察到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情況
(詳見)

㈥ jmeter怎樣實現jvm監控

不太好監控,建議自己用第三方軟體監控JVM的情況,可以用jconsole。

㈦ 如何開發java虛擬機性能監控

關於性能調優:
1 需要一個性能探測器,找到調用最頻繁的代碼段,優化這部分代碼(優化演算法
2 往往1%的代碼運行時間佔99%。所以優化這些代碼就能事半功倍。
3 最好是能看懂編譯後的代碼,這樣分析最徹底。
Java的性能分析使用JProfiler
堆棧分析使用的Jstack

Java性能調優 SSH框架優化以適應特定的項目
一、JVM調優
1 各種垃圾回收演算法及其優劣;
2 針對不同應用類型如何選擇JVM參數
3 常用調優工具的使用(jps/jstat/jmap/jstack/jinfo/jhat)
4 調優案例分析(如何選擇不同內存塊的大小,如何選擇不同的演算法來提升性能、響應時間)

二、Java應用中CPU佔用率、使用情況分析,線程死鎖等鎖
系統性能瓶頸的分析定位
1 JStack的深度使用
2 各種Linux監控命令的配合使用(top,vmstat,iostat,sar 不要輕信自己能完全掌控這些命令)、分析
(前一陣Java漏洞通過製造Hash沖突來占盡CPU資源就可以通過top命令快速定位到,你肯定沒有這么用過)
3 JProfiler的詳細使用

三、Java內存溢出分析
1 用EMA來分析內存佔用情況

2 通過案例分析來定位內存泄漏

互聯網中的性能主要是兩個方面:
1 吞吐量,就是系統支持的訪問量。
2 延遲,就是一個請求提交後,相應的時間。
一般硬體不變的情況下,兩方面各自優化到極限後,相互會制約,也就是吞吐量增強的話比如需要延遲加大,反之亦然。

㈧ 如何查看java虛擬機堆內存的參數值

請確保java_home/bin配置到path環境變數下,因為這些工具都在jdk的bin目錄下

jps(JVM Process Status Tool):JVM機進程狀況工具

用來查看基於HotSpot JVM裡面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。與unix上的ps類似,用來顯示本地有許可權的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。使用jps時,不需要傳遞進程號做為參數。
Jps也可以顯示遠程系統上的JAVA進程,這需要遠程服務上開啟了jstat服務,以及RMI注及服務,不過常用都是對本對的JAVA進程的查看。
命令格式:jps [ options ] [ hostid ]
常用參數說明:
-m 輸出傳遞給main方法的參數,如果是內嵌的JVM則輸出為null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。
例如:
C:\Users\Administrator>jps -lmv
1796 -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m
7340 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\DevTools\VM\jdk1.6.0_31\\lib\dt.jar;D:\DevTools\VM\jdk1.6.0_31\\lib\tools.jar; -Dapplication.home=D:\DevTools\VM\jdk1.6.0_31 -Xms8m
其中pid為1796的是我的eclipse進程,pid為7340的是jps命令本身的進程

jinfo(Configuration Info for Java):JVM配置信息工具

可以輸出並修改運行時的java 進程的opts。用處比較簡單,用於輸出JAVA系統參數及命令行參數
命令格式:jinfo [ options ] [ pid ]
常用參數說明:
-flag 輸出,修改,JVM命令行參數
例如:
C:\Users\Administrator>jinfo 1796
將會列印出很多jvm運行時參數信息,由於比較長這里不再列印出來,可以自己試試,內容一目瞭然

Jstack(Stack Trace for Java):JVM堆棧跟蹤工具
jstack用於列印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64「
命令格式:jstack [ option ] pid
常用參數說明:
-F 當』jstack [-l] pid』沒有相應的時候強制列印棧信息
-l 長列表. 列印關於鎖的附加信息,例如屬於java.util.concurrent的ownable synchronizers列表.
-m 列印java和native c/c++框架的所有棧信息.
-h | -help列印幫助信息
例如:
C:\Users\Administrator>jstack 1796
2013-05-22 11:42:38
Full thread mp Java HotSpot(TM) Client VM (20.6-b01 mixed mode):

"Worker-30" prio=6 tid=0x06514c00 nid=0x1018 in Object.wait() [0x056af000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
- locked <0x1ad84a90> (a org.eclipse.core.internal.jobs.WorkerPool)
at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)
......
......
......
......

jstat(JVM statistics Monitoriing Tool):JVM統計信息監視工具

對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控
命令格式:jstat [ option pid [interval [ s | ms ] [count] ] ]
常用參數說明:
-gcutil 輸出已使用空間占總空間的百分比
-gccapacity 輸出堆中各個區域使用到的最大和最小空間
例如:每隔1秒監控jvm內存一次,共監控5次
C:\Users\Administrator>jstat -gccapacity 1796 1s 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 96
13632.0 174720.0 40896.0 4032.0 4032.0 32832.0 27328.0 349568.0 81684.0 81684.0 12288.0 262144.0 80640.0 80640.0 42 97
C:\Users\Administrator>jstat -gcutil 1796 1s 5
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
0.00 0.00 0.52 53.35 99.77 42 0.513 99 38.119 38.632
一些術語的中文解釋:
S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
EC:年輕代中Eden(伊甸園)的容量 (位元組)
EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
OC:Old代的容量 (位元組)
OU:Old代目前已使用空間 (位元組)
PC:Perm(持久代)的容量 (位元組)
PU:Perm(持久代)目前已使用空間 (位元組)
YGC:從應用程序啟動到采樣時年輕代中gc次數
YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
FGC:從應用程序啟動到采樣時old代(全gc)gc次數
FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啟動到采樣時gc用的總時間(s)
NGCMN:年輕代(young)中初始化(最小)的大小 (位元組)
NGCMX:年輕代(young)的最大容量 (位元組)
NGC:年輕代(young)中當前的容量 (位元組)
OGCMN:old代中初始化(最小)的大小 (位元組)
OGCMX:old代的最大容量 (位元組)
OGC:old代當前新生成的容量 (位元組)
PGCMN:perm代中初始化(最小)的大小 (位元組)
PGCMX:perm代的最大容量 (位元組)
PGC:perm代當前新生成的容量 (位元組)
S0:年輕代中第一個survivor(倖存區)已使用的占當前容量百分比
S1:年輕代中第二個survivor(倖存區)已使用的占當前容量百分比
E:年輕代中Eden(伊甸園)已使用的占當前容量百分比
O:old代已使用的占當前容量百分比
P:perm代已使用的占當前容量百分比
S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (位元組)
S1CMX :年輕代中第二個survivor(倖存區)的最大容量 (位元組)
ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)
DSS:當前需要survivor(倖存區)的容量 (位元組)(Eden區已滿)
TT: 持有次數限制
MTT : 最大持有次數限制

jmap( Memory Map for Java):JVM內存映像工具

列印出某個java進程(使用pid)內存內的所有『對象』的情況(如:產生那些對象,及其數量)
命令格式:jmap [ option ] pid
常用參數說明:
-mp:[live,]format=b,file=<filename> 使用二進制形式輸出jvm的heap內容到文件中, live子選項是可選的,假如指定live選項,那麼只輸出活的對象到文件.
-histo[:live] 列印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上前綴」*」. 如果live子參數加上後,只統計活的對象數量.
-F 強迫.在pid沒有相應的時候使用-mp或者-histo參數. 在這個模式下,live子參數無效.
例如:以二進制形式輸入當前堆內存映像到文件data.hprof中
jmap -mp:live,format=b,file=data.hprof 1796
生成的文件可以使用jhat工具進行分析,在OOM(內存溢出)時,分析大對象,非常有用
通過使用如下參數啟動JVM,也可以獲取到mp文件:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pid<pid>.hprof
在jvm發生內存溢出時生成內存映像文件

jhat(JVM Heap Analysis Tool):JVM堆轉儲快照分析工具

用於對JAVA heap進行離線分析的工具,他可以對不同虛擬機中導出的heap信息文件進行分析,如LINUX上導出的文件可以拿到WINDOWS上進行分析,可以查找諸如內存方面的問題。
命令格式:jhat mpfile(jmap生成的文件)
例如:分析jmap導出的內存映像
jhat data.hprof
執行成功後,訪問http://localhost:7000即可查看內存信息,

MAT(Memory Analyzer Tool):一個基於Eclipse的內存分析工具

官網: http://www.eclipse.org/mat/
update:http://download.eclipse.org/mat/1.2/update-site/
這是eclipse的一個插件,安裝後可以打開xxx.hprof文件,進行分析,比jhat更方便使用,有些時候由於線上xxx.hprof文件過大,直接使用jhat進行初步分析了,可以的話拷貝到本地分析效果更佳。

圖形化監控工具:

在JDK安裝目錄bin下面有兩個可視化監控工具
1. JConsole(Java Monitoring and Management Console) 基於JMX的可視化管理工具。
2. VisualVM(All-in-one Java Troubleshooting Tool)隨JDK發布的最強大的運行監視和故障處理程序。
推薦使用VisualVM,他有很多插件,可以更方便的監控運行時JVM

㈨ 如何打開java jvm監控工具

請確保java_home/bin配置到path環境變數下,因為這些工具都在jdk的bin目錄下
圖形化工具 ctrl+R 命令行 輸入: jVisualVM 進入圖形化工具查看cpu 內存等等的消耗
jps(JVM Process Status Tool):JVM機進程狀況工具

用來查看基於HotSpot JVM裡面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。與unix上的ps類似,用來顯示本地有許可權的java進程,可以查看本地運行著幾個java程序,並顯示他們的進程號。使用jps時,不需要傳遞進程號做為參數。
Jps也可以顯示遠程系統上的JAVA進程,這需要遠程服務上開啟了jstat服務,以及RMI注及服務,不過常用都是對本對的JAVA進程的查看。
命令格式:jps [ options ] [ hostid ]
常用參數說明:
-m 輸出傳遞給main方法的參數,如果是內嵌的JVM則輸出為null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。

㈩ Linux系統監控要用到哪些命令

記錄一下自己常用的linux系統命令,方便以後查閱,發覺記憶越來越不行了
找到最耗CPU的java線程ps命令
命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

結果展示:

這個命令的作用,主要是可以獲取到對應一個進程下的線程的一些信息。 比如你想分析一下一個java進程的一些運行瓶頸點,可以通過該命令找到所有當前Thread的佔用CPU的時間,也就是這里的最後一列。

比如這里找到了一個TID : 30834 ,所佔用的TIME時間最高。

通過 printf "%x\n" 30834 首先轉化成16進制, 繼續通過jstack命令mp出當前的jvm進程的堆棧信息。 通過Grep命令即可以查到對應16進制的線程id信息,很快就可以找到對應最耗CPU的代碼快在哪。

簡單的解釋下,jstack下這一串線程信息內容:

"DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]
nid : 對應的linux操作系統下的tid,就是前面轉化的16進制數字

tid: 這個應該是jvm的jmm內存規范中的唯一地址定位,如果你詳細分析jvm的一些內存數據時用得上,我自己還沒到那種程度,所以先放下

top命令
命令:top -Hp pid

結果顯示:

和前面的效果一下,你可以實時的跟蹤並獲取指定進程中最耗cpu的線程。 再用前面的方法提取到對應的線程堆棧信息。

判斷I/O瓶頸

mpstat命令
命令:mpstat -P ALL 1 1000

結果顯示:

注意一下這裡面的%iowait列,CPU等待I/O操作所花費的時間。這個值持續很高通常可能是I/O瓶頸所導致的。

通過這個參數可以比較直觀的看出當前的I/O操作是否存在瓶頸

iostat命令
命令: iostat -m -x 1 1000

同樣你可以觀察對應的CPU中的%iowait數據,除此之外iostat還提供了一些更詳細的I/O狀態數據,比如比較重要的有:

avgqu-sz : The average queue length of the requests that were issued to the device. (磁碟隊列的請求長度,正常的話2,3比較好。可以和cpu的load一樣的理解)

await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一個I/O操作從wait到完成的總時間)

svctm和%util都是代表處理該I/O請求花費的時間和CPU的時間比例。 判斷是否瓶頸時,這兩個參數不是主要的

r/s w/s 和 rMB/s wMB/s 都是代表當前系統處理的I/O的一些狀態,前者是我們常說的tps,後者就是吞吐量。這也是評價一個系統的性能指標

pid命令
命令: pidstat -p pid -u -d -t -w -h 1 1000

結果顯示:

相當實用的一個命令,可以基於當個進程分析對應的性能數據,包括CPU,I/O,IR , CS等,可以方便開發者更加精細化的觀察系統的運行狀態。不過pidstat貌似是在2.6內核的一些較新的版本才有,需要安裝sysstat包。

ubuntu下,可以通過sudo apt-get install sysstat進行安裝。

sar命令
命令:sar -x pid 1 1000

sar也可以指定對應的pid,關注固定的幾個參數,沒有pidstat那麼強大。 看不到對應的I/O, IR等信息。

sar的功能可以覆蓋mpstat , iostat的相關功能。

dstat命令
命令:dstat -y --tcp 1 1000

通過dstat --tcp可以比較方便的看到當前的tcp的各種狀態,不需要每次netstat -nat去看

其他命令
netstat -natp : 查看對應的網路鏈接,關注下Recv-Q , Send-Q , State。

lsof -p pid : 查找對應pid的文件句柄

lsof -i : 80 : 查找對應埠被哪個進程佔用

lsof /tmp/1.txt :查找對應文件被哪個進程佔用

tcpmp / wireshark :抓包分析工具

jstat / jmap / jstack / jps 等一系列的java監控命令

最後
如果你想做一些性能調優的工作,一定要善於利用一些工具進行關注相應的狀態。通過linux命令你可以比較方便的觀測到CPU , I/O , network等一些比較外圍的狀態, 很多時候就已經可以解決大部分的問題。jvm內部的一些運行狀態監控,得需要藉助一些特有的工具進行細粒度的觀測。

閱讀全文

與jvm監控命令相關的資料

熱點內容
自助編程軟體app 瀏覽:436
伺服器如何看日活數 瀏覽:684
數控車床原理圖及編程 瀏覽:287
java文件流下載 瀏覽:336
編程工作工資多少 瀏覽:437
專業安全文件夾 瀏覽:777
表格里的根號演算法怎麼打 瀏覽:193
javacorepdf 瀏覽:573
pdf轉換word編輯 瀏覽:446
35歲程序員實習期恐慌 瀏覽:701
如何做一個系統u盤文件夾名字 瀏覽:968
如何確認哪個ip重啟了伺服器 瀏覽:132
照片壓縮軟體綠色版 瀏覽:109
pgp基於什麼體系加密 瀏覽:637
python合法賦值語句格式 瀏覽:715
程序員數學線性代數 瀏覽:624
看幀率app如何使用 瀏覽:525
從DHC伺服器租用IP地址 瀏覽:477
編譯怎麼學 瀏覽:333
數碼管顯示0到9plc編程 瀏覽:667