日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 写入txt_Java线程转储的8个选项

發布時間:2024/7/19 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 写入txt_Java线程转储的8个选项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線程轉儲是診斷CPU尖峰,死鎖,內存問題,無響應的應用程序,較差的響應時間以及其他系統問題的重要工件。

有很多很棒的在線線程轉儲分析工具,可以分析和發現問題。但是對于那些工具,您需要提供適當的線程轉儲作為輸入。因此,在本文中,我記錄了7種不同的選項來捕獲線程轉儲。

1. jstack

“ jstack”是捕獲線程轉儲的有效命令行工具。jstack工具位于JDK_HOME bin文件夾中。這是捕獲線程轉儲所需發出的命令:

jstack -l <pid> > <file-path>

哪里:

pid:是應用程序的進程ID,應捕獲其線程轉儲

file-path:是將寫入線程轉儲的文件路徑。

例:

jstack -l 37320 > /opt/tmp/threadDump.txt

按照示例,該過程的線程轉儲將在/opt/tmp/threadDump.txt文件中生成。

自Java 5以來,JDK中已包含Jstack工具。如果您在舊版Java中運行,請考慮使用其他選項

2.kill-3

在大型企業中,出于安全原因,只有JRE安裝在生產機器中。由于jstack和其他工具只是JDK的一部分,因此您將無法使用jstack。在這種情況下,可以使用“ kill -3”選項。

kill -3 <pid>

哪里:

pid:是應用程序的進程ID,應捕獲其線程轉儲

例:

Kill -3 37320

使用'kill -3'選項時,線程轉儲將發送到標準錯誤流。如果要在tomcat中運行應用程序,則線程轉儲將發送到<TOMCAT_HOME> /logs/catalina.out文件中。

注意:據我所知,大多數* nix操作系統(Unix,Linux,HP-UX操作系統)都支持此選項。不確定其他操作系統。

3. JVisualVM

Java VisualVM是一種圖形用戶界面工具,可在應用程序在指定的Java虛擬機(JVM)上運行時提供有關這些應用程序的詳細信息。它位于JDK_HOME bin jvisualvm.exe中。自JDK 6更新7.s起,它是Sun JDK發行版的一部分。

啟動jvisualvm。在左側面板上,您會注意到計算機上正在運行的所有Java應用程序。您需要從列表中選擇您的應用程序。該工具還具有從遠程主機上運行的Java進程中捕獲線程轉儲的功能。

4.Java Mission Control

Java Mission Control(JMC)是一種工具,可從本地運行或部署在生產環境中的Java應用程序收集和分析數據。自Oracle JDK 7 Update 40起,該工具已打包到JDK中。該工具還提供了從JVM進行線程轉儲的選項。JDK_HOME bin jmc.exe中存在JMC工具

啟動該工具后,您將看到本地主機上正在運行的所有Java進程。注意:JMC還具有與遠程主機上運行的Java進程連接的能力。現在,在左側面板上,單擊要進行線程轉儲的Java進程下方列出的“ Flight Recorder”選項。

5. Windows(按Ctrl + Break)

此選項僅在Windows操作系統中有效。

· 選擇已啟動應用程序的命令行控制臺窗口。

· 現在,在控制臺窗口上,發出“ Ctrl + Break ”命令。

這將生成線程轉儲。線程轉儲將被打印在控制臺窗口本身上。

注1:在幾臺筆記本電腦(例如我的Lenovo T系列)中,“ Break”鍵被拔下。在這種情況下,您必須在Google上找到“ Break”的等效鍵。在我的情況下,事實證明“功能鍵+ B”等效于“斷裂”鍵。因此,我不得不使用“ Ctrl + Fn + B”來生成線程轉儲。

注意2:但是這種方法的一個缺點是線程轉儲將打印在Windows控制臺本身上。如果不以文件格式獲取線程轉儲,則很難使用線程轉儲分析工具(例如http://fasthread.io)。因此,當您從命令行啟動應用程序時,將輸出重定向到文本文件,即示例,如果您正在啟動應用程序“ SampleThreadProgram”,則將發出以下命令:

java -classpath . SampleThreadProgram

而是像這樣啟動SampleThreadProgram

java -classpath . SampleThreadProgram > C:workspacethreadDump.txt 2>&1

因此,當您發布“ Ctrl + Break”時,線程轉儲將發送到C: workspace threadDump.txt文件。

6. ThreadMXBean

從JDK 1.5開始,引入了ThreadMXBean。這是Java虛擬機中線程系統的管理接口。使用此接口,您還可以生成線程轉儲。您只需編寫幾行代碼即可以編程方式生成線程轉儲。下面是ThreadMXBean實現的框架實現,該實現從應用程序生成Thread dump。

public void dumpThreadDump() {

ThreadMXBean threadMxBean = ManagementFactory.getThreadMXBean();

for (ThreadInfo ti : threadMxBean.dumpAllThreads(true, true)) {

System.out.print(ti.toString());

}

}

7. APM工具– App Dynamics

很少有應用程序性能監視工具提供生成線程轉儲的選項。如果要通過App Dynamics(APM工具)監視應用程序,則以下是捕獲線程轉儲的說明:

1.創建一個動作,在“創建動作”窗口中選擇“ 診斷”->“執行線程轉儲 ”。
2.輸入操作名稱,要采樣的數量以及線程轉儲之間的間隔(以毫秒為單位)。
3.如果要在啟動線程轉儲操作之前需要批準,請選中“在此操作之前需要批準”復選框,然后輸入被授權批準該操作的個人或組的電子郵件地址。有關更多信息,請參見需要批準的操作。
4.單擊確定。

8. JCMD

jcmd工具是隨Oracle Java 7引入的。它對解決JVM應用程序的問題很有用。它具有多種功能,例如,識別Java進程ID,獲取堆轉儲,獲取線程轉儲,獲取垃圾收集統計信息等等。

使用以下JCMD命令,可以生成線程轉儲:

jcmd <pid> Thread.print > <file-path>

哪里

pid: 是應用程序的進程ID,應捕獲其線程轉儲

file-path: 是將寫入線程轉儲的文件路徑。

例:

jcmd 37320 Thread.print > /opt/tmp/threadDump.txt

按照示例,該過程的線程轉儲將在/opt/tmp/threadDump.txt文件中生成。

結論

即使列出了7個不同的選項來捕獲線程轉儲,恕我直言,最好還是使用1.'jstack'和2.'kill -3'。因為他們是:

一種。簡單(直接,易于實現)

b。通用(在大多數情況下均可運行,與操作系統,Java供應商,JVM版本等無關)

總結

以上是生活随笔為你收集整理的java 写入txt_Java线程转储的8个选项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。