<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # JStack 線程轉儲分析器 > 原文: [https://howtodoinjava.com/linux/how-to-get-thread-dump-in-linux-using-jstack/](https://howtodoinjava.com/linux/how-to-get-thread-dump-in-linux-using-jstack/) 線程轉儲是 Java 虛擬機(JVM)中當前活動的所有 Java 線程的列表。 有幾種方法可以從 JVM 提取[線程](https://howtodoinjava.com/java/multi-threading/java-thread-life-cycle-and-thread-states/)轉儲。 強烈建議在分析任何問題(例如[死鎖](https://howtodoinjava.com/java/multi-threading/writing-a-deadlock-and-resolving-in-java/)或資源使用情況分析)時采取多個線程轉儲。 最好在多個線程轉儲中進行確認,然后單次嘗試得出結論。 ## 1.獲取 Java 進程的 PID 獲得線程轉儲所需的第一條信息是 Java 進程的 PID。 Java JDK 附帶`jps`命令,該命令列出了所有 Java 進程 ID。 您可以這樣運行此命令: ```java $ jps -l ``` ***記住*** – 您可能必須以`$ sudo -u jps -l`運行此命令,其中“`user`”是正在運行的 Java 進程用戶的用戶名。 即使現在,如果您仍無法找到進程 ID,請使用以下命令: ```java $ ps -aef | grep java ``` ## 2.從 JVM 請求線程轉儲 如果已安裝/可用,我們建議使用 [**jstack**](https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html "jstack") 工具。 它將線程轉儲打印到命令行控制臺。 要使用 jstack 獲得**線程轉儲**,請運行以下命令: ```java $ jstack ``` 您可以使用控制臺輸出`redirect/append`偽指令將連續的線程轉儲輸出到文件中: ```java $ jstack >> threaddumps.log ``` **要點** 1. 從 JDK 1.5 開始,可以使用 jstack 工具。 2. 即使啟用了`-Xrs jvm`參數,jstack 也可以工作。 3. 無法使用 JDK 1.6 中的 jstack 工具從運行在 JDK 1.5 上的進程中進行線程轉儲。 ## 3.使用 jstack 腳本以固定的時間間隔進行線程轉儲采樣 這個簡單的 Shell 腳本以固定的時間間隔拍攝了幾個 jstack 快照([參考文檔](https://wiki.eclipse.org/How_to_report_a_deadlock#jstackSeries_--_jstack_sampling_in_fixed_time_intervals_.28tested_on_Linux.29 "jstack refernce")): ```java #!/bin/bash if [ $# -eq 0 ]; then echo >= 2 "Usage: jstackSeries [ count [ delay ] ]" echo >= 2 " Defaults: count = 10, delay = 1 (seconds)" exit 1 fi pid=$1????????? # required count=${2:-10}? # defaults to 10 times delay=${3:-1} # defaults to 1 second while [ $count -gt 0 ] do ??? jstack $pid >jstack.$pid.$(date +%H%M%S.%N) ??? sleep $delay ??? let count-- ??? echo -n "." done ``` 像這樣使用上面的腳本: ```java $ jstackSeries 10 5 ``` ## 4.如何比較兩個 JStack 線程轉儲 要**比較線程轉儲**,您可以使用交互式差異查看器,例如: ```java $ vimdiff file1 file2 file3 file4 # up to 4 files ``` 查看 jstack 跟蹤的哪些部分隨時間變化的另一種方法是使用`$ context diff`(-c 選項)比較相鄰的 jstack 跟蹤: ```java d_old="" for d in jstack.13585.12171* do ? if [ -n "$d_old" ] ? then ??? diff -c "$d_old" "$d" ? fi ? d_old="$d" done ``` 在這里,結果僅顯示 **JStack 線程轉儲**在文件之間更改的位置。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看