jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip

命令行参数选项说明如下:

-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。

第一步先找出Java进程ID,拿tomcat为例:

[root@localhost ~]# ps -ef | grep tomcat | grep -v grep tomcat 21251 1 1 6月29 ? 03:13:42 jsvc.exec -java-home /Data/app/jdk1.7.0_80 -user tomcat -pidfile /Data/app/tomcat/logs/catalina-daemon.pid -wait 10 -outfile /Data/app/tomcat/logs/catalina-daemon.out -errfile &1 -classpath /Data/app/tomcat/bin/bootstrap.jar:/Data/app/tomcat/bin/commons-daemon.jar:/Data/app/tomcat/bin/tomcat-juli.jar -Djava.util.logging.config.file=/Data/app/tomcat/conf/logging.properties -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.10.8.64 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+DisableExplicitGC -XX:ParallelGCThreads=2 -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -verbose:gc -Xloggc:/Data/app/tomcat/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Data/app/tomcat/logs -Djava.endorsed.dirs= -Dcatalina.base=/Data/app/tomcat -Dcatalina.home=/Data/app/tomcat -Djava.io.tmpdir=/Data/app/tomcat/temp org.apache.catalina.startup.Bootstrap [root@localhost ~]#

得到进程ID为21711,第二步找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我这里用第三个,输出如下:

TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21553的线程,用

printf "%x\n" 21553

得到21553的十六进制值为5431,下面会用到。

OK,下一步终于轮到jstack上场了,它用来输出进程21251的堆栈信息,然后根据线程ID的十六进制值grep,如下:

root@ubuntu:/# jstack 21251 | grep 5431 

可以看到CPU消耗在com.wzc.manage.meta.vehicle.listener.DeviceOnlineMsgListener-1这个类的Object.wait(),就可以定位到改段代码。

遇到的问题:1. 进程下无内容显示

解决方案:对权限配置进行了修改,即可打印出线程堆栈信息。

jstack-查看Java进程的线程堆栈信息,锁定高消耗资源代码相关推荐

  1. java windows 取所有任务_Win下,通过Jstack截取Java进程中的堆栈信息

    在Java软件的使用过程中,有时会莫名的出现奇怪的问题.而这些问题常常无法使用日志信息定位,这时我们就需要通过查看进程内部线程的堆栈调用关系来分析问题出在哪里. 举个例子,当我们在做某个操作时,莫名的 ...

  2. 如何快速查看进程/子线程堆栈

    背景:分析现网问题时,有时需要快速查看某个进程/子线程堆栈调用,便于进一步分析问题,现提供几种不同获取进程堆栈方法. 实现方法: 1.使用gdb attach 调试进程,使用gdb相关cmd调试进程 ...

  3. linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

    定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...

  4. jstack查看某个进程堆栈信息

    jstack主要用来查看某个进程内线程的堆栈信息 一个死锁的模拟代码 package test;import java.util.concurrent.Executor; import java.ut ...

  5. linux查看java堆栈信息_Java运行状态分析2:获取线程堆栈信息

    Java运行状态分析2:获取线程堆栈信息 基本概念 出现内存泄漏或者运行缓慢场景,有时候无法直接从业务日志看出问题时候,需要分析jvm内存和线程堆栈 线程堆栈信息主要记录jvm线程在某时刻线程执行情况 ...

  6. java线程堆栈信息分析

    线程堆栈也称作线程调用堆栈.Java线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况等信息.对于已经消失而又没留有痕迹的信 ...

  7. jpa,分析duid参数,当前用户的最大线程数,线上问题排查,stack命令查看占用CPU高的线程堆栈信息

    1.先查看应用进程号: ps -ef | grep 应用名 ,也就是 pid 2.查看pid垃圾回收情况: jstat -gc pid 5000(时间间隔) 3.dump jvm二进制的内存详细使用情 ...

  8. jps命令:查看Java进程等详细信息

    转载自 jps命令:查看Java进程等详细信息 jps是java自带的查看java进程的命令,通过这个命令可以查看当前系统所有运行中的java进程.java包名.jar包名及JVM参数等. jps - ...

  9. linux使用jps查看java进程信息 单进程详细信息查看

    前言 在开发中,我们经常需要使用jps工具查看Java进程信息,很方便.不过如果我们想查看详细信息的时候,输出的信息过多且未格式化,很不方便查看,这里介绍一个很快捷的方法对繁杂的信息进行格式化. 提示 ...

最新文章

  1. 崔强:如果有知识就做一个内裤外穿飞行的超人
  2. BSP二叉树的数学原理(绝对原创)
  3. java on RHEL5
  4. 关不关机 扫地机器人_【小米智能家居】米家扫拖机器人,模拟人工来回擦拖地!...
  5. 前端每日实战:56# 视频演示如何用纯 CSS 描述程序员的生活
  6. Pytorch高阶API示范——线性回归模型
  7. 软件构建设计图_游戏设计如何帮助您构建更好的软件
  8. DB2数据库关于delete in id和batch delete的性能对比
  9. Python3入门机器学习经典算法与应用 第3章 Numpy中的比较和FancyIndexing
  10. linux 系统清理工具下载,五款最佳Linux文件系统清理工具
  11. 常见电脑主机报警提示音及对应原因
  12. 网络掘金者信息采集软件行业应用
  13. linux所有目录和子目录和文件777,关于linux:Chmod 777到一个文件夹和所有内容
  14. springboot 删除路径下面所有文件_Spring boot内置Tomcat的临时目录被删除导致文件上传不了-问题解析...
  15. 根据个人情况以及Java程序员面试宝典总结的需要复习的知识点
  16. Win10调整各窗口的任务栏位置
  17. 推荐一款高颜值的第三方网易云播放器,支持网页版和客户端
  18. 低压无感BLDC方波控制方案 反电动势和比较器检测位置 带载满载启动
  19. SqlServer 对数据库文件进行增删改查
  20. 《黄帝内经》的养生之道

热门文章

  1. 皮一皮:皇上,他在下毒!
  2. 因“薪水太高”被欠薪3个月、后又遭解雇?程序员愤怒反击!
  3. 自己搭建个对象存储服务难不难?
  4. 遇到Request header is too large,你们是如何解决的?
  5. Spring Framework 5.3.6、5.2.14 发布
  6. 皮一皮:P没P图?傻傻分不清...
  7. 程序员的核心竞争力究竟是什么?
  8. mac mysql utf 8编码_MacOS下MySQL设置UTF8编码问题
  9. java正则表达式 过滤特殊字符的正则表达式
  10. python dll 变量