linux查看线程状态--jstack

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

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

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

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

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

[[email protected] 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(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)
时间: 2024-10-10 14:58:44

linux查看线程状态--jstack的相关文章

Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定

0.最常用 pstree:[[email protected] temp]# pstree -a|grep multe  |       |   `-multepoolser  |       |       `-multepoolser  |       |           `-2*[{multepoolser}] 1. > top 可以显示所有系统进程 按u, 再输入相应的执行用户名称,比如Tom 可以看到Tom用户启动的所有进程和对应的pid 2. > pstack pid 可以看到

Linux查看系统状态命令

Linux查看系统状态命令     iostat iostat 命令详细地显示了存储子系统方面的情况.你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早发现输入/输出缓慢的问题.相信我,你应该在用户发现这些问题之前先发现这些问题! meminfo和free meminfo为你详细显示了内存方面的情况.你通常可以使用另一个程序,比如cat和grep,来访问meminfo的信息.比如说,cat /proc/meminfo为你详细显示了服务器的内存在任何一个

linux查看memcached状态

一.使用memcache top脚本 memcache-top 是一个用 Perl 编写的命令行小工具,用来实时的获取 memcached 缓存服务器的详细信息,例如缓存命中率等.到官网下载脚本,放到用户目录,直接运行即可. /home/nihaoya/memcache-top INSTANCE USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s10.50.11.5:11211 88.8% 69.6% 1123 1.9ms 0.3 13.1K 36.2K 1

linux 查看线程和线程数

linux下查看线程方法一.ps [[email protected] ~]# ps -T -p 30557 PID SPID TTY TIME CMD 30557 30557 ? 00:00:00 nginx 二.top top -H -p <pid> 附:查看tomcat进程号:ps -ef | grep tomcat根据进程号查询对应的目录:/proc/pid/cwd.ls -la /proc/pid/fd根据目录查找对应的进程:lsof /usr/local/nginx/查看tomca

Linux 查看服务状态(服务与进程)

指令(instruction): 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等.这些最基础的计算机动作被称为指令 (instruction). 程序(program): 这样一系列指令的所构成的集合.通过程序,我们可以让计算机完成复杂的操作.程序大多数时候被存储为可执行的文件.这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭菜. 进程(process): 进程是程序的一个具体实现.只有食谱没什么用,我们总要按照食谱的指点真正一步步实

linux查看防火墙状态及开启关闭命令(转)

存在以下两种方式: 一.service方式 查看防火墙状态: [[email protected] ~]# service iptables status iptables:未运行防火墙. 开启防火墙: [[email protected] ~]# service iptables start 关闭防火墙: [[email protected] ~]# service iptables stop 二.iptables方式 先进入init.d目录,命令如下: [[email protected]

linux 查看防火墙状态

1.查看防火墙状态 systemctl status firewalld 2.查看防火墙是否开机启动 systemctl is-enabled firewalld 3.关闭防火墙 systemctl stop firewalld systemctl status firewalld 4.禁用防火墙(系统启动时不启动防火墙服务) systemctl disable firewalld systemctl is-enabled firewalld

linux查看防火墙状态及开启关闭命令

查看防火墙状态:  [[email protected] ~]# service iptables status iptables:未运行防火墙. 开启防火墙: [[email protected] ~]# service iptables start 关闭防火墙: [[email protected] ~]# service iptables stop 原文地址:https://www.cnblogs.com/dk1024/p/11747788.html

LInux查看CPU状态

1.htop 2.top 内容解释: PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使用的共享内存 S:进程的状态.S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 %CPU:进程占用CPU的使用率 %MEM:进程使用的物理内存和总内存的百分比 TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值. COMMAND:进程启动命令名称