1. 程式人生 > >linux檢視執行緒狀態--jstack

linux檢視執行緒狀態--jstack

    在linux下執行多執行緒程式,想檢視各個執行緒的執行情況,怎麼辦?

    Linux下檢視某程序的執行緒狀態:

    1.jps或top或ps -ef|grep java,找到需要的程序pid;

    2.jstack pid,檢視pid的所有執行緒狀態資訊;

下面為一個示例:程序6798啟動了5個執行緒,其他兩個正在跑,另外三個進入了睡眠狀態。

[[email protected] topology]# jstack 67982015-03-02 09:49:05Full thread dump Java HotSpot(TM) 64-Bit Server VM (17.1-b03 mixed mode):"pool-1-thread-5" prio=10 tid=0x00007f956c0cb000 nid=0x1a9e runnable [0x00007f95269a9000]   java.lang.Thread.State: RUNNABLE    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(SocketInputStream.java:129)    at oracle.net.ns.Packet.receive(Unknown Source)    at oracle.net.ns.DataPacket.receive(Unknown Source)    at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:979)    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:951)    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:435)    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:182)    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:630)    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:961)    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:532)    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1037)    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2905)    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:2946)    - locked <0x00007f9564b03cf0> (a oracle.jdbc.driver.T4CPreparedStatement)    - locked <0x00007f95527be288> (a oracle.jdbc.driver.T4CConnection)    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)    at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)    at org.hibernate.loader.Loader.doQuery(Loader.java:662)    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)    at org.hibernate.loader.Loader.doList(Loader.java:2211)    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)    at org.hibernate.loader.Loader.list(Loader.java:2090)    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)    at com.hc360.storm.dao.BaseDao.query(BaseDao.java:753)    at com.hc360.storm.dao.BaseDao.query(BaseDao.java:676)    at com.hc360.storm.dao.CompassProdDao.resetFreeBusinComplete(CompassProdDao.java:80)    at com.hc360.storm.service.CompassManage.resetBusinCompass(CompassManage.java:621)    at com.hc360.storm.service.CompassManage.saveBusinInfo(CompassManage.java:456)    at com.hc360.storm.service.CompassManage.initBusinScore(CompassManage.java:215)    at com.hc360.storm.service.CompassManage.initUserBusinScore(CompassManage.java:270)    at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at java.lang.reflect.Method.invoke(Method.java:597)    at com.hc360.storm.service.BusinessInvocationHandler.invoke(BusinessInvocationHandler.java:42)    at $Proxy1.initUserBusinScore(Unknown Source)    at com.hc360.storm.newinit.BatchInitUser.initOneUser(BatchInitUser.java:59)    at com.hc360.storm.newinit.InitUserTask.run(BatchInitUser.java:91)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)"pool-1-thread-4" prio=10 tid=0x00007f956c0c9800 nid=0x1a9d waiting on condition [0x00007f9526aab000]   java.lang.Thread.State: TIMED_WAITING (sleeping)    at java.lang.Thread.sleep(Native Method)    at com.hc360.storm.newinit.InitUserTask.run(BatchInitUser.java:81)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)"pool-1-thread-3" prio=10 tid=0x00007f956c0c8000 nid=0x1a9c waiting on condition [0x00007f9526bac000]   java.lang.Thread.State: TIMED_WAITING (sleeping)    at java.lang.Thread.sleep(Native Method)    at com.hc360.storm.newinit.InitUserTask.run(BatchInitUser.java:81)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)"pool-1-thread-2" prio=10 tid=0x00007f956c0c6800 nid=0x1a9b waiting on condition [0x00007f9526cad000]   java.lang.Thread.State: TIMED_WAITING (sleeping)    at java.lang.Thread.sleep(Native Method)    at com.hc360.storm.newinit.InitUserTask.run(BatchInitUser.java:81)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)"pool-1-thread-1" prio=10 tid=0x00007f956c0c4800 nid=0x1a9a runnable [0x00007f9526dad000]   java.lang.Thread.State: RUNNABLE    at java.net.SocketInputStream.socketRead0(Native Method)    at java.net.SocketInputStream.read(SocketInputStream.java:129)    at oracle.net.ns.Packet.receive(Unknown Source)    at oracle.net.ns.DataPacket.receive(Unknown Source)    at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.net.ns.NetInputStream.read(Unknown Source)    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:979)    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:951)    at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:100)    at oracle.jdbc.driver.T4CConnection.do_rollback(T4CConnection.java:474)    - locked <0x00007f9552188c00> (a oracle.jdbc.driver.T4CConnection)    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1034)    - locked <0x00007f9552188c00> (a oracle.jdbc.driver.T4CConnection)    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.resetTxnState(C3P0ImplUtils.java:275)    at com.mchange.v2.c3p0.impl.NewPooledConnection.reset(NewPooledConnection.java:388)    at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:362)    - locked <0x00007f9552188b70> (a com.mchange.v2.c3p0.impl.NewPooledConnection)    at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246)    - locked <0x00007f9564a6cbd8> (a com.mchange.v2.c3p0.impl.NewProxyConnection)    at org.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:70)    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:449)    at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:404)    at org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:291)    at org.hibernate.jdbc.JDBCContext.afterTransactionCompletion(JDBCContext.java:221)    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:119)    at com.hc360.mmt.db.dao.util.MmtSessionFactory.commit(MmtSessionFactory.java:164)    at com.hc360.storm.dao.BaseDao.commit(BaseDao.java:1774)    at com.hc360.storm.dao.BaseDao.update(BaseDao.java:418)    at com.hc360.storm.dao.BaseDao.update(BaseDao.java:372)    at com.hc360.storm.dao.CompassProdDao.resetFreeBusinComplete(CompassProdDao.java:100)    at com.hc360.storm.service.CompassManage.resetBusinCompass(CompassManage.java:621)    at com.hc360.storm.service.CompassManage.saveBusinInfo(CompassManage.java:456)    at com.hc360.storm.service.CompassManage.initBusinScore(CompassManage.java:215)    at com.hc360.storm.service.CompassManage.initUserBusinScore(CompassManage.java:270)    at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at java.lang.reflect.Method.invoke(Method.java:597)    at com.hc360.storm.service.BusinessInvocationHandler.invoke(BusinessInvocationHandler.java:42)    at $Proxy1.initUserBusinScore(Unknown Source)    at com.hc360.storm.newinit.BatchInitUser.initOneUser(BatchInitUser.java:59)    at com.hc360.storm.newinit.InitUserTask.run(BatchInitUser.java:91)    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)    at java.lang.Thread.run(Thread.java:662)

相關推薦

linux檢視執行狀態--jstack

    在linux下執行多執行緒程式,想檢視各個執行緒的執行情況,怎麼辦?    Linux下檢視某程序的執行緒狀態:    1.jps或top或ps -ef|grep java,找到需要的程序pid;    2.jstack pid,檢視pid的所有執行緒狀態資訊;下面為

linux檢視執行狀態

前言 在除錯程式時需要檢視各個執行緒的狀態,方便定位問題。 解決 方法1、pstree pstree PID 方法2、top top 然後按H,會顯示執行緒 -p

linux適當的時候用ps、top檢視執行狀態

最近定位了一個執行緒沒有正常退出的bug,導致一直建立執行緒,然後排程超時掛死的bug,花了兩天的時間,要是儘早用sp看一下,這個問題就結束了,所以別看命令簡單,關鍵時候還是好用的。 1. pstree pstree以樹結構顯示程序 $ pstree -p work | grep ad sshd(22669

linux檢視執行執行情況

問題:我的程式在其內部建立並執行了多個執行緒,我怎樣才能在該程式建立執行緒後監控其中單個執行緒?我想要看到帶有它們名稱的單個執行緒詳細情況(如,CPU/記憶體使用率)。執行緒是現代作業系統上進行並行執行的一個流行的程式設計方面的抽象概念。當一個程式內有多個執行緒被叉分出用以執

java執行狀態——jstack的應用

jstack是java提供的查詢jvm棧資訊的小工具。 在之前的文章中已經廣泛的使用它,文章參考如下: 當我們要使用jstack時,不可避免的重要入參就是pid(jvm的啟動程序) 我們可以通過jps完成這個工作,jps有四個操作選項,qvml 其實這四個引數是很

linux下程序和執行狀態檢視

檢查 使用 ps -fe |grep programname 檢視獲得程序的pid,再使用 ps -Lf pid 檢視對應程序下的執行緒數. 查詢資料發現可以通過設定 ulimit -s 來增加每程序執行緒數。 每程序可用執行緒數 = VIRT上限/stack size

利用jstack檢視執行執行狀態

首先一段程式碼 public class P173ThreadState { public static void main(String[] args) { new Thread(new TimeWaiting(),"TimeWaitingThread").sta

Java分析系列之四:jstack生成的Thread Dump日誌執行狀態

前面文章中只分析了Thread Dump日誌檔案的結構,今天針對日誌檔案中 Java EE middleware, third party & custom application Threads 部分執行緒的狀態進行詳細的分析。 目錄 [隱藏] 1 Thread Dump日誌

伺服器故障排查 如何使用jstack分析執行狀態

使用jstack精確找到異常程式碼的:https://blog.csdn.net/Mr__fang/article/details/68496248?utm_source=blogxgwz0 Java記憶體洩漏分析系列之一:使用jstack定位執行緒堆疊資訊:https://www.javatang.com

jstack執行狀態分析

jstack Dump 日誌檔案中的執行緒狀態 dump 檔案裡,值得關注的執行緒狀態有: 死鎖,Deadlock(重點關注)  執行中,Runnable    等待資源,Waiting on condition(重點關注) 

學習筆記: jstack執行狀態

jstatck可以列印JVM內部所有執行緒 1、檢視有哪些java程序   2、檢視所有執行緒的資訊 重定向到5579.txt檔案中 jstack 5579 > 5579.txt   3、執行緒的狀態 New: 執行緒還沒有啟動 RUNNABLE:已經在JVM中

JVM除錯常用命令——jstack命令與執行狀態(3)

(接上文《JVM除錯常用命令——jstack命令與Java執行緒棧(2)》) 2.1.3.2、當前執行緒呼叫目前執行緒的join方法,等待後者執行完成 join方法可以讓一個執行緒持續等待到另一個執行緒完成執行後,再繼續進行執行。下面我們就來看一下使用join方法讓一個執行緒進入

如何使用 jstack 分析執行狀態

背景 記得前段時間,同事說他們測試環境的伺服器cpu使用率一直處於100%,本地又沒有什麼介面呼叫,為什麼會這樣?cpu使用率居高不下,自然是有某些執行緒一直佔用著cpu資源,那又如何檢視佔用cpu較高的執行緒? 當然一個正常的程式設計師不會寫出上述程式碼,這

如何使用jstack分析執行狀態

背景 記得前段時間,同事說他們測試環境的伺服器cpu使用率一直處於100%,本地又沒有什麼介面呼叫,為什麼會這樣?cpu使用率居高不下,自然是有某些執行緒一直佔用著cpu資源,那又如何檢視佔用cpu較高的執行緒? 當然一個正常的程式設計師不會寫出上述程式碼,這裡只

四十二、Linux 執行——執行同步之條件變數之執行狀態轉換

42.1 執行緒狀態轉換 42.1.1 狀態轉換圖    42.1.2 一個執行緒計算,多個執行緒獲取的案例 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4

同一程序內多個執行狀態檢視

今天發現伺服器上程式執行異常,整個程式是在執行,但從日誌看只有部分執行緒在執行,而另一部分執行緒沒執行。然後我就在程式碼中加入了一些更詳細的日誌,然而問題發生時,程式還是那種異常。於是就上網搜了一些檢視

Linux執行程式設計時如何檢視一個程序中的某個執行是否存活

pthread_kill: 別被名字嚇到,pthread_kill可不是kill,而是向執行緒傳送signal。還記得signal嗎,大部分signal的預設動作是終止程序的執行,所以,我們才要用signal()去抓訊號並加上處理函式。 int pthread_kil

檢視執行執行狀態

執行緒共有6中狀態:新建,執行(可執行),阻塞,等待,計時等待和終止。 當使用new操作符建立新執行緒時,執行緒處於“新建”狀態。 當呼叫start()方法時,執行緒處於執行(可執行)狀態。 當執行緒需要獲得物件的內建鎖,而該鎖正被其他執行緒擁有,執行緒處

jstack Dump 日誌檔案中的執行狀態

1、執行緒狀態為“waiting for monitor entry”: 意味著它 在等待進入一個臨界區 ,所以它在”Entry Set“佇列中等待。 此時執行緒狀態一般都是 Blocked: java.lang.Thread.State:BLOCKED(on objec

Jboss的jmx-console中檢視記憶體和執行狀態

步驟: 1.假設jboss執行在 192.168.1.100:8080 地址和埠上。 3.選擇jboss.system。 選擇type=serverinfo. 檢視記憶體情況: 1.呼叫 listMemoryPools。顯示 code cache , eden space, surviro space ,