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

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

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

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

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

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

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

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

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

它的使用非常简单:

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

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

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

如图

2d014e7048107912af68f87dcf1ca804.png

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

eb7c678922510c08e11d1f3b1f1e0c7d.png

勾选PID 然后确定

ea5dbab70175222888a2977524be8b33.png

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

79fa24e34ed951c21215379dfe8e9b09.png

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

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

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

5461f38f892960542ea20368b9e31b36.png

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

他们的含义如下:

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

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

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

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

66cacbdd3fca4679a2dabc2c9274c0d7.png

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

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

如下图:

3b0e8f7a64f21fddb8e8bd80133ac18f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis基础一_常用指令

# Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with the file path as first argument: #./redis-server /path/to/redis.conf docker启动redis: docker run -d -p 6379:6379 -v /home/anmin/Desktop/…

滴滴Booster移动APP质量优化框架 学习之旅 三

推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源优化和无用资源优化进行了讨论。这里对不可编译无用assets资源优化进行讨论。 先看微信Matrix-ApkC…

Colder框架硬核更新(Sharding+IOC)

目录 引言控制反转读写分离分库分表 理论基础设计目标现状调研设计思路实现之过五关斩六将 动态对象动态模型缓存数据源移植查询表达式树深度移植数据合并算法事务支持实际使用展望未来引言 前方硬核警告:全文干货11000字,请耐心阅读 遥想去年这个时候&a…

python:小心类实例的属性动态绑定机制

为什么80%的码农都做不了架构师?>>> class Test:def __init__(self):self.__keyinitdef get_key(self):return self.__keydef set_key(self,key):self.__keykeyif __name__ __main__:obj Test()print(obj.get_key())#输出初始值initobj.set_key(通过s…

java 获取手机归属地_java 获取手机归属地

java 获取手机归属地[2021-01-30 20:46:44] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:…

Atom常用功能插件

minimap代码缩略图插件 代码粒子效果activate-power-mode 代码格式化插件atom-beautify packages-->Atom Beautify-->Beautify进行格式化 标签折叠 autoclose-html 转载于:https://www.cnblogs.com/chenxi-hxl/p/9464120.html

java中和char功能相反的是_JAVA基础语法

java的基础语法Java中的程序可分为结构定义语句和功能执行语句.结构定义语句:用于声明一个类或方法,功能执行语句用于实现具体的功能。功能执行语句:每条功能执行语句的结尾都必须用英文分号(;)结束。public修饰的类名必须和文件名一致(如果没…

P1357 花园 (矩阵快速幂+ DP)

题意:一个只含字母C和P的环形串 求长度为n且每m个连续字符不含有超过k个C的方案数 m < 5 n < 1e15 题解:用一个m位二进制表示状态 转移很好想 但是这个题是用矩阵快速幂加速dp的 因为每一位的转移都是一样的 用一个矩阵表示状态i能否转移到状态j 然后跑一遍 统计答案特…

IDEA设置类、方法注释模板

类注释模板 File -> Other Setting -> Default Setting打开默认设置 Editor -> File and Code Templates -> Files -> Class 找到类注释模板&#xff0c;在public class前面添加模板注释 /** * program: ${PROJECT_NAME}->${NAME} * description: ${descript…

netty源码分析之服务端启动全解析

background netty 是一个异步事件驱动的网络通信层框架&#xff0c;其官方文档的解释为 Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and stream…

Android-一张图理解MVP的用法

M和V通过P交互&#xff0c;M做了两件事&#xff0c;开启子线程做耗时操作&#xff0c;然后使用原生的Hander方式切回主线程回调结果给P。 M做的两件事也可以使用比较流行的rxjava实现&#xff1a; 备注&#xff1a;图片不清晰可以看这里 转载于:https://www.cnblogs.com/develo…

C语言文字加密程序的实现

前言&#xff1a;当今社会是一个信息社会&#xff0c;你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着&#xff0c;那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢&#xff1f;下面就给大家提供一个原理极其简单程序极其容…

java 抽象类与接口理解

2019独角兽企业重金招聘Python工程师标准>>> 在java 中抽象类是implements [等有时间了补充] 转载于:https://my.oschina.net/kuchawyz/blog/1929094

算法:把数组排成最小的数

* Description 把数组排成最小的数* 问题&#xff1a;输入一个正整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。* 例如输入数组{3&#xff0c;32&#xff0c;321}&#xff0c;则打印出这三个数字能排成的最小数字为…

深度解析数据分析、大数据工程师和数据科学家的区别

数据越来越多的影响并塑造着那些我们每天都要交互的系统。不管是你使用Siri&#xff0c;google搜索&#xff0c;还是浏览facebook的好友动态&#xff0c;你都在消费者数据分析的结果。我们赋予了数据如此大的转变的能力&#xff0c;也难怪近几年越来越多的数据相关的角色被创造…

RabbitMQ 入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)

发布&#xff0f;订阅 在上篇第二部分教程中&#xff0c;我们搭建了一个工作队列。每个任务之分发给一个工作者&#xff08;worker&#xff09;。在本篇教程中&#xff0c;我们要做的之前完全不一样——分发一个消息给多个消费者&#xff08;consumers&#xff09;。这种模式被…

Proxmox VE 安装、配置、使用之第二章 Proxmox VE 的安全性

第一章 Proxmox VE 的安全性一、 角色及权限图2-1-1二、 Root 的密码安全性把 Root 的实际密码给出去, 在任何系统都是不符合安全规范的!所以在 Linux 里面, 最好把有需要 root 权限的使用者 放到 sudoers 的群组.# sudo usermod -a -G sudo testuserPVE 的权限设定方式 是由 u…

java allocate_Java中volatile关键字的最全总结

一、简介volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制&#xff1a;同步块(或方法)和 volatile 变量&#xff0c;相比于synchronized(synchronized通常称为重量级锁)&#xff0c;volatile更轻量级&#xff0c;因为它不会引起线程上下文的切换和调…

缩放手势 ScaleGestureDetector 源码解析,这一篇就够了

其实在我们日常的编程中&#xff0c;对于缩放手势的使用并不是很经常&#xff0c;这一手势主要是用在图片浏览方面&#xff0c;比如下方例子。但是&#xff08;敲重点&#xff09;&#xff0c;作为 Android 入门的基础来说&#xff0c;学习 ScaleGestureDetector 的使用&#x…

postgres的数据库备份和恢复

备份和恢复 一条命令就可以解决很简单: 这是备份的命令&#xff1a; pg_dump -h 127/0.0.1 -U postgres databasename > databasename.bak 指令解释&#xff1a; pg_dump 是备份数据库指令&#xff0c;164.82.233.54是数据库的ip地址&#xff08;必须保证数据库允许外部访…