你好。
創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元魯山做網(wǎng)站,已為上家服務(wù),為魯山各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
執(zhí)行命令ulimit ?-a,查看棧大小的限制。
通過使用 ?ulimit ?-s 數(shù)字 進行設(shè)置。
先用ps看目前存在的所有進程的進程號,然后可以對具體進程采用以下這些操作:(11345就是對應(yīng)具體的進程號)
只查看該進程:ps -ef | grep 11345
查看該進程打開的文件:lsof -p 11345
查看內(nèi)存分配:lcat /proc/11345/maps
查看堆棧:pstack 11345
查看發(fā)出的系統(tǒng)調(diào)用:strace -p 11345
查看調(diào)用庫函數(shù):ltrace -p 11345
方法一:pstack pid
NAME
pstack - print a stack trace of a running process
SYNOPSIS
pstack pid
DESCRIPTION
pstack attaches to the active process named by the pid on the command line, and prints out an execution stack trace. If ELF symbols exist in the binary (usually the case
unless you have run strip(1)), then symbolic addresses are printed as well.
If the process is part of a thread group, then pstack will print out a stack trace for each of the threads in the group.
SEE ALSO
nm(1), ptrace(2), gdb(1)
方法二:gstack pid
NAME
gstack - print a stack trace of a running process
SYNOPSIS
gstack pid
DESCRIPTION
gstack attaches to the active process named by the pid on the command line, and prints out an execution stack trace. If ELF symbols exist in the binary (usually the case
unless you have run strip(1)), then symbolic addresses are printed as well.
If the process is part of a thread group, then gstack will print out a stack trace for each of the threads in the group.
SEE ALSO
nm(1), ptrace(2), gdb(1)
方法三:
使用gdb 然后attach 進程ID,然后再使用命令 thread apply all bt。
方法一和方法二一樣,方法三可以查看更多的信息。
第一步:在終端運行Java程序
第二步:通過命令 pidof java 找到已經(jīng)啟動的java進程的ID,選擇需要查看的java程序的進程ID
第三步:使用命令 kill -3 java進行的 pid 打印出java程序的線程堆棧信息
第四步:通常情況下運行的項目可能會比較大,那么這個時候打印的堆棧信息可能會有幾千到幾萬行,為了方便查看,我們往往需要將輸出內(nèi)容進行重定向
使用linux下的重定向命令方式即可:例如: demo.sh run.log 21 將輸出信息重定向到 run.log中。
注:在操作系統(tǒng)中,0 1 2分別對應(yīng)著不同的含義, 如下:
0 : 標準輸入,即:C中的stdin , java中的System.in
1 : 標準輸出, 即:C中的stdout ,java中的System.out
2 : 錯誤輸出, 即:C中的stderr , java中的System.err
Demo:
----------------------------------------------------------------------------------------------
Sources Code :
public class PrintThreadTrace {
Object obj1 = new Object();
Object obj2 = new Object();
public void func1(){
synchronized (obj1){
func2();
}
}
public void func2(){
synchronized (obj2){
while(true){
System.out.print("");
}
}
}
public static void main(String[] args){
PrintThreadTrace ptt = new PrintThreadTrace();
ptt.func1();
}
}
----------------------------------------------------------------------------------------------------------------
按照步驟操作后的打印輸出信息:
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):
"Service Thread" daemon prio=10 tid=0x00007fdc880a9000 nid=0x12a4 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=10 tid=0x00007fdc880a7000 nid=0x12a3 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=10 tid=0x00007fdc880a4000 nid=0x12a2 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"JDWP Command Reader" daemon prio=10 tid=0x00007fdc50001000 nid=0x1299 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"JDWP Event Helper Thread" daemon prio=10 tid=0x00007fdc880a1800 nid=0x1298 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"JDWP Transport Listener: dt_socket" daemon prio=10 tid=0x00007fdc8809e000 nid=0x1297 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x00007fdc88091000 nid=0x1296 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=10 tid=0x00007fdc88071800 nid=0x1295 in Object.wait() [0x00007fdc77ffe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on 0x00000000ecb04858 (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked 0x00000000ecb04858 (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" daemon prio=10 tid=0x00007fdc8806f800 nid=0x1294 in Object.wait() [0x00007fdc7c10b000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on 0x00000000ecb04470 (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked 0x00000000ecb04470 (a java.lang.ref.Reference$Lock)
"main" prio=10 tid=0x00007fdc8800b800 nid=0x128e runnable [0x00007fdc8fef7000]
java.lang.Thread.State: RUNNABLE
at com.wenchain.study.PrintThreadTrace.func2(PrintThreadTrace.java:20)
- locked 0x00000000ecc04b20 (a java.lang.Object)
at com.wenchain.study.PrintThreadTrace.func1(PrintThreadTrace.java:13)
- locked 0x00000000ecc04b10 (a java.lang.Object)
at com.wenchain.study.PrintThreadTrace.main(PrintThreadTrace.java:27)
"VM Thread" prio=10 tid=0x00007fdc8806b000 nid=0x1293 runnable
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007fdc88021000 nid=0x128f runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007fdc88023000 nid=0x1290 runnable
"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007fdc88024800 nid=0x1291 runnable
"GC task thread#3 (ParallelGC)" prio=10 tid=0x00007fdc88026800 nid=0x1292 runnable
"VM Periodic Task Thread" prio=10 tid=0x00007fdc880b3800 nid=0x12a5 waiting on condition
JNI global references: 1391
Heap
PSYoungGen total 17920K, used 1270K [0x00000000ecb00000, 0x00000000ede80000, 0x0000000100000000)
eden space 15872K, 8% used [0x00000000ecb00000,0x00000000ecc3d898,0x00000000eda80000)
from space 2048K, 0% used [0x00000000edc80000,0x00000000edc80000,0x00000000ede80000)
to space 2048K, 0% used [0x00000000eda80000,0x00000000eda80000,0x00000000edc80000)
ParOldGen total 39424K, used 0K [0x00000000c6200000, 0x00000000c8880000, 0x00000000ecb00000)
object space 39424K, 0% used [0x00000000c6200000,0x00000000c6200000,0x00000000c8880000)
PSPermGen total 21504K, used 2619K [0x00000000c1000000, 0x00000000c2500000, 0x00000000c6200000)
object space 21504K, 12% used [0x00000000c1000000,0x00000000c128edd8,0x00000000c2500000)
----------------------------------------------------------------------------------------------------------------------------
上面的信息中包含了當前JVM中所有運行的線程信息,其中在示例中我們啟動的線程為main線程,其余的都是JVM自己創(chuàng)建的。
在打印的信息中,我們可以清楚的看見當前線程的調(diào)用上下文,可以很清楚的知道程序的運行情況。
并且我們在最后面還能看見當前虛擬機中的內(nèi)存使用情況,青年世代,老年世代的信息等等...
PS: 在JDK1.5以上,我們可以通過在Java程序中調(diào)用Thread.getStackTrace()方法來進行堆棧的自動打印,使得線程堆棧的打印時機可編程控制。
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
89841 人正在系統(tǒng)學習中
點擊閱讀全文
打開CSDN,閱讀體驗更佳
jstack-查看Java進程的線程堆棧信息,鎖定高消耗資源代碼
jstack主要用來查看某個Java進程內(nèi)的線程堆棧信息。語法格式如下: jstack[option]pid jstack[option]executable core jstack[option][server-id@]remote-hostname-or-ip 命令行參數(shù)選項說明如下: ...
011Java并發(fā)包018查看線程堆棧信息_執(zhí)筆未來的博客
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurre...
最新發(fā)布 jstack -- java堆棧常用排查指令
jstack -- java堆棧常用排查指令
繼續(xù)訪問
熱門推薦 jstack 命令查看JAVA線程堆棧
JAVA堆棧信息實際生產(chǎn)中,可能由于開發(fā)以及測試未能全面覆蓋的代碼質(zhì)量、性能問題,而引致線程掛起甚至崩潰。可能就需要查看堆棧信息來排查問題了。jps -lvmjps -lvm 用于查看當前機器上運行的java進程。C:\Users\Administratorjps -lvm 7348 -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.defa
繼續(xù)訪問
Java多線程——查看線程堆棧信息
Java多線程——查看線程堆棧信息 摘要:本文主要介紹了查看線程堆棧信息的方法。 使用Thread類的getAllStackTraces()方法 方法定義 可以看到getAllStackTraces()方法的返回值是一個Map對象,key是Thread的實例,value是一個StackTraceElement實例數(shù)組: 1 public static MapThread, S...
繼續(xù)訪問
java堆棧常用排查指令
java 異常排查四板斧 1、查看java 堆棧線程信息 說明 jstack命令打印指定Java進程、核心文件或遠程調(diào)試服務(wù)器的Java線程的Java堆棧跟蹤信息。 對于每個Java框架,完整的類名,方法名, 字節(jié)碼索引(BCI)和行號(如果有的話)被打印出來。 使用-m選項,jstack命令打印程序中所有線程的Java和本機幀 計數(shù)器(PC)。 對于每個本機幀,當可用時,將打印離PC最近的本機符號。 c++亂碼的名字不會被修改。 要demangle c++名稱,輸出這個 命令可以管道到c++filt。 當
繼續(xù)訪問
java診斷工具-Arthas(thread命令)查看當前線程堆棧
cpu使用率與linux 命令top -H -p pid的線程CPU類似 1、支持一鍵展示當前最忙的前N個線程并打印堆棧 thread -n 3 沒有線程ID,包含[Internal]表示為JVM內(nèi)部線程,參考dashboard命令的介紹。 cpuUsage為采樣間隔時間內(nèi)線程的CPU使用率,與dashboard命令的數(shù)據(jù)一致。 deltaTime為采樣間隔時間內(nèi)線程的增量CPU時間,小于1ms時被取整顯示為0ms。 time線程運行總CPU...
繼續(xù)訪問
java查看線程的堆棧信息
通過使用jps 命令獲取需要監(jiān)控的進程的pid,然后使用jstackpid 命令查看線程的堆棧信息。 通過jstack命令可以獲取當前進程的所有線程信息。 每個線程堆中信息中,都可以查看到線程ID、線程的狀態(tài)(wait、sleep、running 等狀態(tài))、是否持有鎖信息等。 jstack -l pid jvm_listlocks.txt 轉(zhuǎn)...
繼續(xù)訪問
java 查看線程堆棧信息_Java多線程——查看線程堆棧信息
java多線程——查看線程堆棧信息摘要:本文主要介紹了查看線程堆棧信息的方法。使用thread類的getallstacktraces()方法方法定義可以看到getallstacktraces()方法的返回值是一個map對象,key是thread的實例,value是一個stacktraceelement實例數(shù)組:1 public static map getallstacktraces()使用可以使...
繼續(xù)訪問
java線程堆棧信息分析
java堆棧信息分析
繼續(xù)訪問
java 查看堆棧_javap 命令查看堆棧中信息
javap命令是對.java文件進行反編譯,通過這個命令可以看到堆棧中是怎么壓棧和出棧的已經(jīng)執(zhí)行順序,這里簡單解釋下javap的簡單的使用,下面舉個例子:題目:i++ 和++i的區(qū)別解釋:簡單點說 這個問題都不難回答,這里就不說了,但是實際上堆棧中區(qū)別也是老大了(這里就用到了javap命令), 步驟:1.在任意一個盤下面建一個名為Test.java的文件(文件名可以隨意命名)代碼如下:public...
繼續(xù)訪問
java 查看線程堆棧信息_jstack-查看Java進程的線程堆棧信息,鎖定高消耗資源代碼。...
jstack主要用來查看某個Java進程內(nèi)的線程堆棧信息。語法格式如下:jstack[option]pidjstack[option]executablecorejstack[option][server-id@]remote-hostname-or-ip命令行參數(shù)選項說明如下:-llonglistings,會打印出額外的鎖信息,在發(fā)生死鎖時可以用jstack-lpid來觀察...
繼續(xù)訪問
java堆棧信息怎么看_線程堆棧信息怎么看? - cs_person的個人空間 - OSCHINA - 中文開源技術(shù)交流社區(qū)...
一條線程堆棧信息大概長成下面這個樣子:RMI TCP Connection(267865)-172.16.5.25" daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd4f8684000]java.lang.Thread.State: BLOCKED (on object m...
繼續(xù)訪問
線程堆棧信息怎么看?
一條線程堆棧信息大概長成下面這個樣子: RMI TCP Connection(267865)-172.16.5.25" daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd...
繼續(xù)訪問
java的棧和堆
棧與堆都是Java用來在Ram中存放數(shù)據(jù)的地方。與C++不同,Java自動管理棧和堆,程序員不能直接地設(shè)置棧或堆。 Java 的堆是一個運行時數(shù)據(jù)區(qū),類的(對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負責的,堆的優(yōu)勢是可以動態(tài)地分配內(nèi)存大小,生存期也不必事先告訴編譯器,因為它是在...
繼續(xù)訪問
查看java線程_【JAVA】Java線程堆棧信息查看
如何獲得線程的堆棧信息?線上服務(wù)器cpu 100%了,該如何排查問題?1.top命令查詢哪個pid進程占用cpu高(ps -ef|grep java 獲取PID號)2.通過 top -Hp pid 可以查看該進程下各個線程的cpu使用情況,獲取占用cpu高的線程id3.執(zhí)行命令:printf "%X\n" 線程tid(用于獲取占用cpu高的線程id的16進制數(shù))4.執(zhí)行命令:jstack pid ...
繼續(xù)訪問
kill -3 java_kill -3 PID命令獲取java應(yīng)用堆棧信息
一、應(yīng)用場景:當linux服務(wù)器出現(xiàn)異常情況(響應(yīng)緩慢,負載持續(xù)飆升)并且服務(wù)器沒有安裝對應(yīng)的包而無法使用jstack等命令時,可以使用linux的kill相關(guān)命令打印堆棧信息。命令格式:kill -3 PID二、執(zhí)行步驟:2.1、獲取java進程的PIDps -ef|grep java結(jié)果的第二列數(shù)字就是進程對應(yīng)的pid。2.2、kill -3 PID(1)如果項目通過Tomcat進行發(fā)布(普通...
繼續(xù)訪問
jstack 工具 查看JVM堆棧信息
1|0介紹 jstack是java虛擬機自帶的一種堆棧跟蹤工具。jstack用于打印出給定的java進程ID或corefile或遠程調(diào)試服務(wù)的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式: jstack [-l] pid 主要分為兩個功能: a. 針對活著的進程做本地的或遠程的線程dump; b. 針對core文件做線程dump。 jstack用于生成java虛擬機當前時刻的線程快照。線程快照是...
繼續(xù)訪問
linux查看java堆棧
1、查看JAVA進程JVM參數(shù) jinfo -flags pid(進程號) -XX:CICompilerCount=2 最大的并行編譯數(shù) -XX:InitialHeapSize=16777216 JVM 的初始堆內(nèi)存大小 -XX:MaxHeapSize=257949696 JVM 的最大堆內(nèi)存大小 -XX:MaxNewSize=85983232 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=5570560 -XX:OldSize=11206656 2、JVM 查看.
繼續(xù)訪問
Linux 如何查看一個進程的堆棧
有兩種方法:第一種:pstack 進程ID第二種,使用gdb 然后attach 進程ID,然后再使用命令 thread apply all bt 兩種方法都可以列出進程所有的線程的當前的調(diào)用棧。不過,使用gdb的方法,還可以查看某些信息,例如局部變量,指針等。不過,如果只看調(diào)用棧的話,pstack還是很方便的。
繼續(xù)訪問
JAVA獲取堆棧信息
1. 通過Throwable獲取 StackTraceElement[] stackTrace = new Throwable().getStackTrace(); 2. 通過Thread獲取 StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
繼續(xù)訪問
java 查看線程棧大小_基于 Java 線程棧的問題排查
除日志外,還有沒有別的方式跟蹤線上服務(wù)問題呢?或者,跟蹤并排除日志里無法發(fā)現(xiàn)的問題?方法當然是有的,就是通過現(xiàn)場快照定位并發(fā)現(xiàn)問題。我們所說的現(xiàn)場,主要指這兩方面:Java 線程棧。線程棧是Java線程工作的快照,可以獲得當前線程在做什么;Java 內(nèi)存堆。堆是JVM的內(nèi)存快照,可以獲取內(nèi)存分配相關(guān)信息。