在linux下运行多线程程序,想查看各个线程的运行情况,怎么办?
Linux下查看某进程的线程状态:
1.jps或top或ps -ef|grep java,找到需要的进程pid;
2.jstack pid,查看pid的所有线程状态信息;
下面为一个示例:进程6798启动了5个线程,其他两个正在跑,另外三个进入了睡眠状态。[root@stormnimbus topology]# jstack 6798
2015-03-02 09:49:05
Full 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(OraclePreparedStatemen