在linux下运行多线程程序,想查看各个线程的运行情况,怎么办?

    Linux下查看某进程的线程状态:

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

    2.jstack pid,查看pid的所有线程状态信息;

下面为一个示例:进程6798启动了5个线程,其他两个正在跑,另外三个进入了睡眠状态。

[root@stormnimbus 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)