1. 程式人生 > >效能調優工具Jstack使用

效能調優工具Jstack使用

前言:在web開發過程中,不管是eclipse還是web服務有時候會經常遇到OutofMemoryError(記憶體不足),記憶體洩露,執行緒鎖死,java程序CPU過高等操作,伺服器可以允許這些問題的存在,導致這些問題在日常開發中被更多的人忽略掉。

jstack的作用:

  jstack 用於答應給定的java程序ID或者core file或遠端除錯服務的java堆疊資訊,可以使用它查明問題。

詳細命令格式:
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server[email protected]
] remote-hostname-or-IP

如果是在64位機器上,需要指定選項”-J-d64”,

首先看一下針對程式死鎖的錯誤排查

package **

/**
 * @author peng
 * @date 2015年9月14日
 * @desc 死鎖例子
 */
public class JstackLockTest {

    public static void main(String[] args) {
        final Object lock1 = new Object(), lock2 = new Object();

        Thread t1 = new
Thread("t1") { @Override public void run() { synchronized (lock1) { try { Thread.sleep(3000); } catch (InterruptedException e) { } synchronized
(lock2) { System.out.println("thread t1 done."); } } } }; Thread t2 = new Thread("t2") { @Override public void run() { synchronized (lock2) { try { Thread.sleep(3000); } catch (InterruptedException e) { } synchronized (lock1) { System.out.println("thread t2 done."); } } } }; t1.start(); t2.start(); } }

上面示例程式碼是一個死鎖的例子,如果在開發過程中遇到這樣的例子,如圖一所示:

等了很長時間都沒有任何輸出,而程式一直在執行中,然後通過jsp檢視該程式的jpid值,使用jstack來檢視堆疊資訊:
Linux程式碼:

$jps
10502 JstackLockTest
12815 Jps
5393 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
10863 JstackLockTest
$jstack -l 10502

對應的結果:

......省略前面log
"Finalizer" daemon prio=10 tid=0x00007fbd7c079000 nid=0x2912 in Object.wait() [0x00007fbd80ff6000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000f5561300> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
        - locked <0x00000000f5561300> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)

   Locked ownable synchronizers:
        - None

"Reference Handler" daemon prio=10 tid=0x00007fbd7c077800 nid=0x2911 in Object.wait() [0x00007fbd810f7000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000f55611d8> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x00000000f55611d8> (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
        - None
......省略後面log

從這個結果檔案我們一看到發現了一個死鎖,具體是執行緒t2在等待執行緒t1,而執行緒t1在等待執行緒t2造成的,同時也記錄了執行緒的堆疊和程式碼行數,通過這個堆疊和行數我們就可以去檢查對應的程式碼塊,從而發現問題和解決問題。

對於高cpu的排查

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26045 peng 20 0 3186184 1.239g 1.145g S 100.4 8.0 421:44.79 vmware-vmx
14938 peng 20 0 1920880 31368 13076 S 100.1 0.2 3:03.75 java
9564 peng 20 0 4404644 1.187g 1.163g S 3.3 7.6 462:03.29 vmware-vmx
1132 root 20 0 540820 122556 104088 S 1.7 0.8 22:07.77 Xorg
3746 peng 20 0 1612920 196932 36636 S 1.7 1.2 33:28.35 compiz
12545 peng 20 0 857900 50584 23196 S 1.0 0.3 0:07.37 /usr/bin/termin
10 root 20 0 0 0 0 S 0.3 0.0 0:32.85 rcuos/2
490 peng 20 0 1173848 171256 60884 S 0.3 1.0 0:51.94 chromium-browse
981 peng 20 0 1288652 290592 64952 S 0.3 1.8 0:49.72 chromi

相關推薦

Java效能調工具——Jstack

一、命令說明 Jstack是Jdk自帶的執行緒跟蹤工具,用於列印指定Java程序的執行緒堆疊資訊。 二、引數說明 jstack -l [pid] 注意:windows環境只支援這麼一個引數 三、使用示例 jstack -l 5524 &g

效能調工具Jstack使用

前言:在web開發過程中,不管是eclipse還是web服務有時候會經常遇到OutofMemoryError(記憶體不足),記憶體洩露,執行緒鎖死,java程序CPU過高等操作,伺服器可以允許這些問題的存在,導致這些問題在日常開發中被更多的人忽略掉。 js

Java效能調工具——Jinfo

一、命令說明 jinfo(Java Virtual Machine Configuration Info for Java)是從JDK1.5自帶的工具,用於檢視Java應用程式的引數(JVM引數 + 系統引數),甚至支援在執行時調整部分引數,可以調整的引數如下

系統級效能調工具Perf成功移植到龍芯處理器

http://www.loongson.cn/news/company/304.html 程式優化主要包括演算法優化、程式碼優化和系統級優化,Perf是Linux核心自帶的系統級效能調優工具,2.6.31核心開始引入,目的是實現硬體與操縱系統資源的高效利用。 Perf主要包括核心空間的Per

Xcode8.3.2 效能調工具 Instruments 之 TimeProfiler -- 揪出頁面卡頓利器的使用方法

廢話不多說,直接上乾貨:(切記兩點:1、真機除錯。2、應用程式執行一定要釋出配置而不是除錯配置) 第一步:找到 TimeProfiler (兩種方法) 1、開啟專案 2、開啟專案 第二步:TimeProfiler 配置 第三步:找到耗時的函式 從圖片中可以看出最耗時的是-

讓 Java 應用執行更快:效能調工具及實踐

Java 應用效能優化是一個老生常談的話題,筆者根據個人經驗,將 Java 效能優化分為 4 個層級:應用層、資料庫層、框架層、JVM 層。通過介紹 Java 效能診斷工具和思路,給出搜狗商業平臺的效能優化案例以供參考。Java 應用效能優化是一個老生常談的話題,典型的效能問

jvm第五節-效能調工具使用

B.jmap -permstat pid     列印程序的類載入器和類載入器載入的持久代物件資訊,輸出:類載入器名稱、物件是否存活(不可靠)、物件地址、父類載入器、已載入的類大小等資訊,如下: [[email protected] bin]# ./jmap -permstat 568 Attac

系統技術非業餘研究 » Linux常用效能調工具索引

霸爺您好,麻煩請教個問題,我們最近一個專案上有個奇怪的問題,基於實時linux系統,兩個實時執行緒通過mq_send傳送訊息,A發訊息給B,是非阻塞的訊息佇列,A傳送訊息B進行處理,A傳送訊息後發現mq_send的開銷與B對該訊息的處理時延相關,也就是說B處理的快,那麼A呼叫的mq_send返回

Android效能調工具TraceView介紹 (六)

Android效能優化系列彙總已完成,包括: Android自帶的TraceView堪比java的效能調優工具visualvm執行緒檢視,可以方便的檢視執行緒的執行情況,某個方法執行時間、呼叫次數、在總體中的佔比等,從而定位效能點。1、生成日誌

JVM效能調監控工具專題一:JVM自帶效能調工具

前提概要:  JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的狀況,適

java效能優化權威指南---java效能調工具

目錄 1、作業系統的工具和分析 Unix上,sar(system accounting report) vmstat、iostat、prstat Windows上,typeperf 1)CPU使用率(vmstat)  CPU

Java效能調工具

 1.1、jps命令       jps用於列出Java的程序,jps可以增加引數,-m用於輸出傳遞給Java程序的引數,-l用於輸出主函式的完整路徑,-v可以用於顯示傳遞給jvm的引數。 jps -l -m -v 31427 sun.tools.jps.Jps

效能調工具-火焰圖

前言 工具的進化一直是人類生產力進步的標誌,合理使用工具能大大提高我們的工作效率,遇到問題時,合理使用工具更能加快問題排查的進度。這也是我為什麼非常喜歡 shell 的原因,它豐富的命令列工具集加管道特性處理起文字資料集來真的精準而優雅,讓人迷醉。 但很多時候文字的表現力非常有限,可以說匱乏,表達絕對

JVM效能調監控工具jps、jstack、jstat、jmap、jinfo使用

 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... &n

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof詳解

來源:https://my.oschina.net/feichexia/blog/196575 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention)

Jvm:效能調監控工具jps、jstack、jmap、jhat、jstat、hprof

現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ......     這些問題在日常開發中可能被很多人忽視

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解,以及例子

現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ......     這

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解

第一部分:工具介紹部分: 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... 這些問題在日常開發中可能被很多人忽視(比如有的人遇到

JVM效能調監控工具jps、jstack、jstat、jmap、jinfo使用詳解

jcmd命令:主要提供JVM的一些基本資訊查詢(檢視程序執行時間、檢視虛擬機器版本資訊、顯示調優標誌)jinfo命令:檢視程序ID號。檢視JVM的配置引數。jps檢視所有的jvm程序,包括程序ID,程序啟動的路徑等等。我自己也用PS,即:ps -ef | grep javaj

JVM調工具的使用(jps,jstat,jstack,jmap,jhat)

lvm DG odi jvm調優 native boot stopped bject Oz JDK本身提供了很豐富的性能監控工具,除了集成式的visualVM和jConsole外,還有jstat,jstack,jps,jmap,jhat小工具,這些都是性能調優的常用工具我們