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

举个例子,当我们在做某个操作时,莫名的会弹出多个警告框,其中有些信息是正常的,有些则不是。对于这些错误的警告信息,我们该如何定位是哪个位置的代码出现了错误弹出的框呢? 我们就需要在弹框以后,去查看软件的各个线程,去查找究竟是哪个线程导致了该问题。可是有时因为环境、时间等问题,我们根本不能拿着IDE去调试(你总不能拿着笔记本到客户那里说,哥们我来调试下(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )吧), 只能通过工具软件拍下内存快照,然后分析内存信息。

今天介绍一款常用的工具:Jstack

Jstack 是JDK自带的工具,同时也是在JVM性能调优种出镜率非常高的一款软件。所以掌握它是非常有必要的。

Jstack可以生成JVM当前时间点的线程快照。

线程快照就是当前JVM内每一条线程正在执行的方法堆栈的集合。而生成线程快照的主要原因:

1、通过线程快照定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待

2、通过线程快照分析当前执行方法的调用关系来确定异常信息的源头。

它的使用非常简单:

(ps:前提是你已经装有带有Jstack的JDK。同时最好已经设置了环境变量。)

第一步: 通过Windows的任务管理器查看进程的PID

这里简单说下什么是PID:PID就是各进程的身份标识,他是在软件启动后,由操作系统分配的唯一的、用来标识进程身份的一个标识

如图

在进程页签下,查看 > 选择列

勾选PID 然后确定

切到应用程序页签,选择要快照内存的程序。图片中选择的是Android Studio。点击右键转到进程。

这里就查看到 Android Studio对应的PID是9952

第二步 打开命令行,执行Jstack程序

注意,如果没有成功添加环境变量,那么这里只能在Jstack的路径下执行,否则操作系统无法识别。

如图,这里一般有两个运行参数,用来拍取内存快照,

他们的含义如下:

-l long listings,会打印出额(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

我们一般使用-l参数就可以满足需要

格式如下 Jstack -l PID >> 123.txt

ps 这里注意下 >>是重定向的意思,也就是将拍取到的快照定向输出到987.txt中。>> 的两次最好保持空格

这样我们就会在命令行路径下生成一个987.txt文件,同时将内存快照写入到这个文本中

如下图:

java windows 取所有任务_Win下,通过Jstack截取Java进程中的堆栈信息相关推荐

  1. Linux环境下通过gstack命令查看进程的运行堆栈信息

    gstack命令的说明如下: NAMEgstack - print a stack trace of a running process SYNOPSISgstack pid DESCRIPTIONg ...

  2. Java向上取整,向下取整

    Java中向上取整,向下取整 在进行一些数据处理的时候,经常需要对结果进行向上或向下的取整操作,Java有专门的方法支持: 向上取整用Math.ceil(double a) 向下取整用Math.flo ...

  3. linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  4. java list 取几个字段组装成map_24道Java各类常见问题整理

    (1) JSP学了EL表达式就行了吧,还需要深入么?还有spring现在学5就行了吧?总觉得类与对象这里好难,理解不来 (2) 我想问问在校生需要学习JAVA到哪种程度,然后再学学数据结构和算法能达到 ...

  5. jstack-查看Java进程的线程堆栈信息,锁定高消耗资源代码

    jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: jstack [option] pid jstack [option] executable core jstack [opt ...

  6. 关于Java向上取整和向下取整(天花板函数)的说明

    背景 项目应用后期纪要! 问题 1. 小数参数如何向上取整? 2. 小数参数如何向下取整? 说明 向上或向下取整的问题只针对小数类型的数据,在Java中主要用来处理double类型或float类型的数 ...

  7. Java向上取整与向下取整

    向上取整 Math.ceil() 向下取整 Math.floor() 这个记起来比较好记,ceil是天花板的意思,floor是地板的意思,通过这个我们就能很容易的区别哪个是向上取整,哪个是向下取整 示 ...

  8. java 向上取整,向下取整,四舍五入取整

    1.四舍五入:Math.round(); 2.向上取整 :Math.ceil() 3.向下取整 :Math.floor(); 注意向上和向下取整,并非取整数,需要强制类型转化 double num=5 ...

  9. java 向上取整、向下取整、四舍五入

    向上取整:Math.ceil(double a) 向下取整:Math.floor(double a) 四舍五入:Math.round(double a)

最新文章

  1. 深度洞悉2017企业IT三大关注焦点
  2. 常见BIOS设置解析
  3. python自动补全库_叼炸天的库! 自动补全 Python 代码,能节省 60% 敲码时间
  4. cannot和can not的区别 666666
  5. Linux入门(2)_给初学者的建议
  6. 在windows 服务中 调打印_Windows打印后台处理程序漏洞(CVE20201048)
  7. JS鼠标捕获DIV内选中的坐标和宽高
  8. .net网页的生命周期列表
  9. CVPR2013感兴趣的文章整理
  10. docker 外部连接_Docker容器网络通信的那些事儿
  11. 计算机桌面图标有阴影,电脑桌面图标标签出现阴影是怎么回事?桌面图标有背景解决方法...
  12. 计算机等级保护 备案,信息安全等级保护备案实施细则
  13. 深度篇——实例分割(三) 细说 mask rcnn 实例分割代码 训练自己数据 之 相关网络,数据处理,工具等
  14. 系统架构的演变过程?
  15. 用友u8服务器修改ipv4,如何修改用友服务器ip地址
  16. 数值分析(2):线性代数方程组的直接解法
  17. 计算机性能指标的类型,电脑显示器的分类, 性能指标介绍
  18. 麦凯隆全屋分质供水 保障家庭饮用水安全与健康
  19. 如何找出1-100之间的质数
  20. arduino有关软件卸载,库的卸载问题

热门文章

  1. STM32中断优先级的管理(NVIC)
  2. php留言板记录ip,如何用php程序记录来访IP
  3. mysql下载哪一代版本好_潮一代更好的设计
  4. jmeter学习指南之聚合报告
  5. 1067: 有问题的里程表
  6. xtrabackup备份mysql“ib_logfile0 is of different”错误分析
  7. 使用CMD命令修改Windows本地账户密码
  8. CentOS Linux 系统命令之rmdir命令
  9. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
  10. NSString 字符串 操作 常用