java 写入txt_Java线程转储的8个选项
線程轉(zhuǎn)儲(chǔ)是診斷CPU尖峰,死鎖,內(nèi)存問(wèn)題,無(wú)響應(yīng)的應(yīng)用程序,較差的響應(yīng)時(shí)間以及其他系統(tǒng)問(wèn)題的重要工件。
有很多很棒的在線線程轉(zhuǎn)儲(chǔ)分析工具,可以分析和發(fā)現(xiàn)問(wèn)題。但是對(duì)于那些工具,您需要提供適當(dāng)?shù)木€程轉(zhuǎn)儲(chǔ)作為輸入。因此,在本文中,我記錄了7種不同的選項(xiàng)來(lái)捕獲線程轉(zhuǎn)儲(chǔ)。
1. jstack
“ jstack”是捕獲線程轉(zhuǎn)儲(chǔ)的有效命令行工具。jstack工具位于JDK_HOME bin文件夾中。這是捕獲線程轉(zhuǎn)儲(chǔ)所需發(fā)出的命令:
jstack -l <pid> > <file-path>
哪里:
pid:是應(yīng)用程序的進(jìn)程ID,應(yīng)捕獲其線程轉(zhuǎn)儲(chǔ)
file-path:是將寫(xiě)入線程轉(zhuǎn)儲(chǔ)的文件路徑。
例:
jstack -l 37320 > /opt/tmp/threadDump.txt
按照示例,該過(guò)程的線程轉(zhuǎn)儲(chǔ)將在/opt/tmp/threadDump.txt文件中生成。
自Java 5以來(lái),JDK中已包含Jstack工具。如果您在舊版Java中運(yùn)行,請(qǐng)考慮使用其他選項(xiàng)
2.kill-3
在大型企業(yè)中,出于安全原因,只有JRE安裝在生產(chǎn)機(jī)器中。由于jstack和其他工具只是JDK的一部分,因此您將無(wú)法使用jstack。在這種情況下,可以使用“ kill -3”選項(xiàng)。
kill -3 <pid>
哪里:
pid:是應(yīng)用程序的進(jìn)程ID,應(yīng)捕獲其線程轉(zhuǎn)儲(chǔ)
例:
Kill -3 37320
使用'kill -3'選項(xiàng)時(shí),線程轉(zhuǎn)儲(chǔ)將發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤流。如果要在tomcat中運(yùn)行應(yīng)用程序,則線程轉(zhuǎn)儲(chǔ)將發(fā)送到<TOMCAT_HOME> /logs/catalina.out文件中。
注意:據(jù)我所知,大多數(shù)* nix操作系統(tǒng)(Unix,Linux,HP-UX操作系統(tǒng))都支持此選項(xiàng)。不確定其他操作系統(tǒng)。
3. JVisualVM
Java VisualVM是一種圖形用戶(hù)界面工具,可在應(yīng)用程序在指定的Java虛擬機(jī)(JVM)上運(yùn)行時(shí)提供有關(guān)這些應(yīng)用程序的詳細(xì)信息。它位于JDK_HOME bin jvisualvm.exe中。自JDK 6更新7.s起,它是Sun JDK發(fā)行版的一部分。
啟動(dòng)jvisualvm。在左側(cè)面板上,您會(huì)注意到計(jì)算機(jī)上正在運(yùn)行的所有Java應(yīng)用程序。您需要從列表中選擇您的應(yīng)用程序。該工具還具有從遠(yuǎn)程主機(jī)上運(yùn)行的Java進(jìn)程中捕獲線程轉(zhuǎn)儲(chǔ)的功能。
4.Java Mission Control
Java Mission Control(JMC)是一種工具,可從本地運(yùn)行或部署在生產(chǎn)環(huán)境中的Java應(yīng)用程序收集和分析數(shù)據(jù)。自O(shè)racle JDK 7 Update 40起,該工具已打包到JDK中。該工具還提供了從JVM進(jìn)行線程轉(zhuǎn)儲(chǔ)的選項(xiàng)。JDK_HOME bin jmc.exe中存在JMC工具
啟動(dòng)該工具后,您將看到本地主機(jī)上正在運(yùn)行的所有Java進(jìn)程。注意:JMC還具有與遠(yuǎn)程主機(jī)上運(yùn)行的Java進(jìn)程連接的能力。現(xiàn)在,在左側(cè)面板上,單擊要進(jìn)行線程轉(zhuǎn)儲(chǔ)的Java進(jìn)程下方列出的“ Flight Recorder”選項(xiàng)。
5. Windows(按Ctrl + Break)
此選項(xiàng)僅在Windows操作系統(tǒng)中有效。
· 選擇已啟動(dòng)應(yīng)用程序的命令行控制臺(tái)窗口。
· 現(xiàn)在,在控制臺(tái)窗口上,發(fā)出“ Ctrl + Break ”命令。
這將生成線程轉(zhuǎn)儲(chǔ)。線程轉(zhuǎn)儲(chǔ)將被打印在控制臺(tái)窗口本身上。
注1:在幾臺(tái)筆記本電腦(例如我的Lenovo T系列)中,“ Break”鍵被拔下。在這種情況下,您必須在Google上找到“ Break”的等效鍵。在我的情況下,事實(shí)證明“功能鍵+ B”等效于“斷裂”鍵。因此,我不得不使用“ Ctrl + Fn + B”來(lái)生成線程轉(zhuǎn)儲(chǔ)。
注意2:但是這種方法的一個(gè)缺點(diǎn)是線程轉(zhuǎn)儲(chǔ)將打印在Windows控制臺(tái)本身上。如果不以文件格式獲取線程轉(zhuǎn)儲(chǔ),則很難使用線程轉(zhuǎn)儲(chǔ)分析工具(例如http://fasthread.io)。因此,當(dāng)您從命令行啟動(dòng)應(yīng)用程序時(shí),將輸出重定向到文本文件,即示例,如果您正在啟動(dòng)應(yīng)用程序“ SampleThreadProgram”,則將發(fā)出以下命令:
java -classpath . SampleThreadProgram
而是像這樣啟動(dòng)SampleThreadProgram
java -classpath . SampleThreadProgram > C:workspacethreadDump.txt 2>&1
因此,當(dāng)您發(fā)布“ Ctrl + Break”時(shí),線程轉(zhuǎn)儲(chǔ)將發(fā)送到C: workspace threadDump.txt文件。
6. ThreadMXBean
從JDK 1.5開(kāi)始,引入了ThreadMXBean。這是Java虛擬機(jī)中線程系統(tǒng)的管理接口。使用此接口,您還可以生成線程轉(zhuǎn)儲(chǔ)。您只需編寫(xiě)幾行代碼即可以編程方式生成線程轉(zhuǎn)儲(chǔ)。下面是ThreadMXBean實(shí)現(xiàn)的框架實(shí)現(xiàn),該實(shí)現(xiàn)從應(yīng)用程序生成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
很少有應(yīng)用程序性能監(jiān)視工具提供生成線程轉(zhuǎn)儲(chǔ)的選項(xiàng)。如果要通過(guò)App Dynamics(APM工具)監(jiān)視應(yīng)用程序,則以下是捕獲線程轉(zhuǎn)儲(chǔ)的說(shuō)明:
1.創(chuàng)建一個(gè)動(dòng)作,在“創(chuàng)建動(dòng)作”窗口中選擇“ 診斷”->“執(zhí)行線程轉(zhuǎn)儲(chǔ) ”。
2.輸入操作名稱(chēng),要采樣的數(shù)量以及線程轉(zhuǎn)儲(chǔ)之間的間隔(以毫秒為單位)。
3.如果要在啟動(dòng)線程轉(zhuǎn)儲(chǔ)操作之前需要批準(zhǔn),請(qǐng)選中“在此操作之前需要批準(zhǔn)”復(fù)選框,然后輸入被授權(quán)批準(zhǔn)該操作的個(gè)人或組的電子郵件地址。有關(guān)更多信息,請(qǐng)參見(jiàn)需要批準(zhǔn)的操作。
4.單擊確定。
8. JCMD
jcmd工具是隨Oracle Java 7引入的。它對(duì)解決JVM應(yīng)用程序的問(wèn)題很有用。它具有多種功能,例如,識(shí)別Java進(jìn)程ID,獲取堆轉(zhuǎn)儲(chǔ),獲取線程轉(zhuǎn)儲(chǔ),獲取垃圾收集統(tǒng)計(jì)信息等等。
使用以下JCMD命令,可以生成線程轉(zhuǎn)儲(chǔ):
jcmd <pid> Thread.print > <file-path>
哪里
pid: 是應(yīng)用程序的進(jìn)程ID,應(yīng)捕獲其線程轉(zhuǎn)儲(chǔ)
file-path: 是將寫(xiě)入線程轉(zhuǎn)儲(chǔ)的文件路徑。
例:
jcmd 37320 Thread.print > /opt/tmp/threadDump.txt
按照示例,該過(guò)程的線程轉(zhuǎn)儲(chǔ)將在/opt/tmp/threadDump.txt文件中生成。
結(jié)論
即使列出了7個(gè)不同的選項(xiàng)來(lái)捕獲線程轉(zhuǎn)儲(chǔ),恕我直言,最好還是使用1.'jstack'和2.'kill -3'。因?yàn)樗麄兪?#xff1a;
一種。簡(jiǎn)單(直接,易于實(shí)現(xiàn))
b。通用(在大多數(shù)情況下均可運(yùn)行,與操作系統(tǒng),Java供應(yīng)商,JVM版本等無(wú)關(guān))
總結(jié)
以上是生活随笔為你收集整理的java 写入txt_Java线程转储的8个选项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言作业系统输出超限,C语言网Onli
- 下一篇: java工程师的一生_百看不厌之一张图诠