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个选项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言作业系统输出超限,C语言网Onli
- 下一篇: java字符串数组排序_在Java中对字