- 相關(guān)推薦
java虛擬機的故障處理摘要
前言
本文主要給大家介紹的是java虛擬機的故障處理工具,文中提到這些工具包括:
名稱(chēng) 主要作用 jps JVM process Status Tool, 顯示指定系統內所有的HotSpot虛擬機進(jìn)程。通常是本地主機 jstat JVM Statistics Monitoring Tool,用于收集HotSpot虛擬機各方面的運行數據 jinfo Configuration Info for java, 顯示虛擬機配置信息 jmap Memory Map for Java, 生成虛擬機的內存存儲快照(heapdump文件) jhat JVM Heap Dump Browser, 用于分析heapdump文件,它建立一個(gè)HTTP/HTML服務(wù)器,讓用戶(hù)可以在瀏覽器上查看分析結果 jstack Stack Trace for Java, 顯示虛擬機的線(xiàn)程快照
jps:虛擬機進(jìn)程狀況工具
jps的功能和unix/liunx中的ps命令是類(lèi)似。只不過(guò)它是打印出正在運行的虛擬機進(jìn)程,并顯示虛擬機執行主類(lèi)的名稱(chēng)以及這些進(jìn)程的本地虛擬機唯一ID(Local Virtual Machine Identifier, LVMID,通常是系統進(jìn)程ID)。
jps命令格式:
jps [options] [hostId]
jps可以通過(guò)RMI協(xié)議查詢(xún)開(kāi)啟了RMI服務(wù)的遠程虛擬機進(jìn)程狀態(tài),hostId為RMI注冊表中注冊的主機名稱(chēng)。
jps其他常用選項:
-q 只輸出LVMID, 省略主類(lèi)的名稱(chēng);
-m 輸出虛擬機進(jìn)程啟動(dòng)時(shí)候傳遞給主類(lèi)main()函數的參數;
-l 輸出主類(lèi)的全稱(chēng),如果進(jìn)程執行的是jar包,輸出jar路徑;
-v 輸出虛擬機進(jìn)程啟動(dòng)時(shí)候JVM參數。
jps命令樣例:
[root@localhost ~]# jps -l3914 org.zhangyoubao.payservice.App12180 sun.tools.jps.Jps6913 org.zhangyoubao.userprofiler.App
jstat:虛擬機統計信息監視工具
jstat是用于監視虛擬機各種運行狀態(tài)信息的工具。它可以顯示本地或遠程虛擬機進(jìn)程中類(lèi)load,內存gc.jit等運行參數。
jstat命令格式:
jstat [option vmid [interval [s|ms] [count]]]
interval和count代表查詢(xún)間隔和次數。如果省略這兩個(gè)參數,說(shuō)明只查詢(xún)一次。
jstat其他常用選項:
-class 監視類(lèi)load/unload數量、總空間已經(jīng)裝載時(shí)間;
-compiler 輸出JIT編譯器編譯過(guò)的方法、耗時(shí)等信息;
-printcompilation 輸出已經(jīng)被JIT編譯的方法;
-gc 監視java堆狀況;
-gccapacity 監視內容與-gc基本相同,但輸出關(guān)注java各個(gè)區域的最大/最小空間;
-gcutil 監視內容與-gc基本相同,但輸出關(guān)注已使用空間占用百分百比;
-gccause 與-gcutil功能一樣,額外輸出導致上一次GC產(chǎn)生原因;
-gcnew 監視新生代GC狀況;
-gcnewcapacity 監視新生代,輸出同-gccapacity;
-gcold 監視老年代GC狀況;
-gcoldcapacity 監視老年代,輸出同-gccapacity;
-gcpermcapactiy 監視永久代(代碼區),輸出同-gccapacity;
jstat命令樣例:
[root@localhost ~]# jstat -gc 6913 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 168910.7 46872.0 28031.2 37857 380.644 69 3.447 384.091
jinfo:Java配置信息工具
jinfo的作用是實(shí)時(shí)的查看和調整虛擬機各項參數。
jinfo命令格式:
jinfo [option] pid
jinfo其他常用選項:
-flag name=value 修改參數
-flag name 參數參數
jinfo命令樣例:
[root@localhost ~]# jinfo 6913Attaching to process ID 6913, please wait...Debugger attached successfully.Server compiler detected.JVM version is 24.91-b01Java System Properties:...VM Flags:-Xms1000m -Xmx1000m -Dconf=/usr/local/user_profiler/conf -Dserver.root=/usr/local/user_profiler -Dcom.sun.management.jmxremote.port=7003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC
jmap:java內存映射工具
jmap命令可以用于生產(chǎn)堆存儲快照(dump文件)。它還可以查下finalize隊列(自我拯救隊列)、java堆和代碼區的詳細信息。
jmap命令格式:
jmap [option] vmid
jmap其他常用選項:
-dump 生成java堆存儲快照。格式:-dump:[live,]format=b,file=
-finalizerinfo 顯示F-Queue中等待Finalizer現象執行finalize方法的對象;
-heap 顯示java堆詳細信息,如使用哪種回收器、參數配置、分代狀況等待;
-histo 顯示堆中對象統計信息,包括類(lèi)、實(shí)例書(shū)、合計容量;
-permstat 以ClassLoader為統計入口顯示永久代內存信息;
-F 當虛擬機進(jìn)程堆-dump選項沒(méi)有響應時(shí)候,可以使用這個(gè)選項強制生成dump快照。
jmap命令樣例:
[root@localhost ~]# jmap -histo 6913|head -20 num #instances #bytes class name---------------------------------------------- 1: 1864966 113459432 [C 2: 201846 49201192 [B 3: 1597065 38329560 java.lang.String 4: 117477 15037056 org.zhangyoubao.thriftdef.UserUsefulInfo 5: 47104 11072048 [I 6: 268631 8596192 java.util.HashMap$Entry 7: 48812 7451760
其中[C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][] 。
jhat: 虛擬機堆轉存快照分析工具
jhat 命令用于與jmap搭配使用,用來(lái)分析jmap生成的dump文件。jhat內置了一個(gè)微型的HTTP/HTML服務(wù)器,生成的dump文件的分析結果后,可以在瀏覽器查看。
jhat命令格式:
jmap filename
jhat命令樣例:
[root@localhost ~]# jhat html_intercept_server.dump Reading from html_intercept_server.dump...Dump file created Wed Nov 23 13:05:33 CST 2016Snapshot read, resolving...Resolving 203681 objects...Chasing references, expect 40 dots........................................Eliminating duplicate references........................................Snapshot resolved.Started HTTP server on port 7000Server is ready.
jstack:java線(xiàn)程堆棧跟蹤工具
jstack用于生成虛擬機當前時(shí)刻的線(xiàn)程快照。線(xiàn)程快照就是當前虛擬機每一條線(xiàn)程正在執行的方法堆棧計劃,生成線(xiàn)程快照的主要目的是定位線(xiàn)程長(cháng)時(shí)間停頓的原因。在線(xiàn)程停頓的時(shí)候,通過(guò)jstack來(lái)查看沒(méi)有響應的線(xiàn)程在后臺做些什么事情,或者等待著(zhù)什么資源。
jstack命令格式:
jstack [option] vmid
jstack其他選項:
-F 當正常輸出的請求不被響應的時(shí)候,強制輸出線(xiàn)程堆棧;
-l 除了顯示堆棧外,顯示關(guān)于鎖的附加信息;
-m 如果調用本地方法,可以顯示C/C++的堆棧。
jstack命令樣例:
[root@localhost ~]# jstack 29577|head -202016-11-23 12:58:23Full thread dump OpenJDK Server VM (24.91-b01 mixed mode):"pool-1-thread-7261" prio=10 tid=0x0893a400 nid=0x6b0d waiting on condition [0x652ad000] java.lang.Thread.State: TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for<0x75b5b400>(a java.util.concurrent.SynchronousQueue$TransferStack) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359) at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)"service_hot_lscs-0" daemon prio=10 tid=0x6982dc00 nid=0x6aeb waiting on condition [0x64ce1000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.zhangyoubao.video.client.runner.SimpleVideoRunner.doWork(SimpleVideoRunner.java:150)
總結
以上就是這篇文章的全部?jì)热萘,希望本文的內容對大家的學(xué)習或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
【java虛擬機的故障處理摘要】相關(guān)文章:
Java虛擬機介紹07-12
Java虛擬機是什么09-14
Java虛擬機垃圾收集算法08-13
Java虛擬機(JVM)和跨平臺原理05-02
Java 異常處理09-16
dns故障怎么處理07-04
的java圖像處理的方法10-29
java圖像處理的方法10-18