java 写入txt_Java线程转储的8个选项

c324ea09390875934a8908177a4740c0.png

线程转储是诊断CPU尖峰,死锁,内存问题,无响应的应用程序,较差的响应时间以及其他系统问题的重要工件。

有很多很棒的在线线程转储分析工具,可以分析和发现问题。但是对于那些工具,您需要提供适当的线程转储作为输入。因此,在本文中,我记录了7种不同的选项来捕获线程转储。

1. jstack

“ jstack”是捕获线程转储的有效命令行工具。jstack工具位于JDK_HOME bin文件夹中。这是捕获线程转储所需发出的命令:

jstack -l <pid> > <file-path>

哪里:

pid:是应用程序的进程ID,应捕获其线程转储

file-path:是将写入线程转储的文件路径。

例:

jstack -l 37320 > /opt/tmp/threadDump.txt

按照示例,该过程的线程转储将在/opt/tmp/threadDump.txt文件中生成。

自Java 5以来,JDK中已包含Jstack工具。如果您在旧版Java中运行,请考虑使用其他选项

2.kill-3

在大型企业中,出于安全原因,只有JRE安装在生产机器中。由于jstack和其他工具只是JDK的一部分,因此您将无法使用jstack。在这种情况下,可以使用“ kill -3”选项。

kill -3 <pid>

哪里:

pid:是应用程序的进程ID,应捕获其线程转储

例:

Kill -3 37320

使用'kill -3'选项时,线程转储将发送到标准错误流。如果要在tomcat中运行应用程序,则线程转储将发送到<TOMCAT_HOME> /logs/catalina.out文件中。

注意:据我所知,大多数* nix操作系统(Unix,Linux,HP-UX操作系统)都支持此选项。不确定其他操作系统。

3. JVisualVM

Java VisualVM是一种图形用户界面工具,可在应用程序在指定的Java虚拟机(JVM)上运行时提供有关这些应用程序的详细信息。它位于JDK_HOME bin jvisualvm.exe中。自JDK 6更新7.s起,它是Sun JDK发行版的一部分。

启动jvisualvm。在左侧面板上,您会注意到计算机上正在运行的所有Java应用程序。您需要从列表中选择您的应用程序。该工具还具有从远程主机上运行的Java进程中捕获线程转储的功能。

4.Java Mission Control

Java Mission Control(JMC)是一种工具,可从本地运行或部署在生产环境中的Java应用程序收集和分析数据。自Oracle JDK 7 Update 40起,该工具已打包到JDK中。该工具还提供了从JVM进行线程转储的选项。JDK_HOME bin jmc.exe中存在JMC工具

启动该工具后,您将看到本地主机上正在运行的所有Java进程。注意:JMC还具有与远程主机上运行的Java进程连接的能力。现在,在左侧面板上,单击要进行线程转储的Java进程下方列出的“ Flight Recorder”选项。

5. Windows(按Ctrl + Break)

此选项仅在Windows操作系统中有效。

· 选择已启动应用程序的命令行控制台窗口。

· 现在,在控制台窗口上,发出“ Ctrl + Break ”命令。

这将生成线程转储。线程转储将被打印在控制台窗口本身上。

注1:在几台笔记本电脑(例如我的Lenovo T系列)中,“ Break”键被拔下。在这种情况下,您必须在Google上找到“ Break”的等效键。在我的情况下,事实证明“功能键+ B”等效于“断裂”键。因此,我不得不使用“ Ctrl + Fn + B”来生成线程转储。

注意2:但是这种方法的一个缺点是线程转储将打印在Windows控制台本身上。如果不以文件格式获取线程转储,则很难使用线程转储分析工具(例如http://fasthread.io)。因此,当您从命令行启动应用程序时,将输出重定向到文本文件,即示例,如果您正在启动应用程序“ SampleThreadProgram”,则将发出以下命令:

java -classpath . SampleThreadProgram

而是像这样启动SampleThreadProgram

java -classpath . SampleThreadProgram > C:workspacethreadDump.txt 2>&1

因此,当您发布“ Ctrl + Break”时,线程转储将发送到C: workspace threadDump.txt文件。

6. ThreadMXBean

从JDK 1.5开始,引入了ThreadMXBean。这是Java虚拟机中线程系统的管理接口。使用此接口,您还可以生成线程转储。您只需编写几行代码即可以编程方式生成线程转储。下面是ThreadMXBean实现的框架实现,该实现从应用程序生成Thread dump。

public void dumpThreadDump() {

ThreadMXBean threadMxBean = ManagementFactory.getThreadMXBean();

for (ThreadInfo ti : threadMxBean.dumpAllThreads(true, true)) {

System.out.print(ti.toString());

}

}

7. APM工具– App Dynamics

很少有应用程序性能监视工具提供生成线程转储的选项。如果要通过App Dynamics(APM工具)监视应用程序,则以下是捕获线程转储的说明:

1.创建一个动作,在“创建动作”窗口中选择“ 诊断”->“执行线程转储 ”。
2.输入操作名称,要采样的数量以及线程转储之间的间隔(以毫秒为单位)。
3.如果要在启动线程转储操作之前需要批准,请选中“在此操作之前需要批准”复选框,然后输入被授权批准该操作的个人或组的电子邮件地址。有关更多信息,请参见需要批准的操作。
4.单击确定

8. JCMD

jcmd工具是随Oracle Java 7引入的。它对解决JVM应用程序的问题很有用。它具有多种功能,例如,识别Java进程ID,获取堆转储,获取线程转储,获取垃圾收集统计信息等等。

使用以下JCMD命令,可以生成线程转储:

jcmd <pid> Thread.print > <file-path>

哪里

pid: 是应用程序的进程ID,应捕获其线程转储

file-path: 是将写入线程转储的文件路径。

例:

jcmd 37320 Thread.print > /opt/tmp/threadDump.txt

按照示例,该过程的线程转储将在/opt/tmp/threadDump.txt文件中生成。

结论

即使列出了7个不同的选项来捕获线程转储,恕我直言,最好还是使用1.'jstack'和2.'kill -3'。因为他们是:

一种。简单(直接,易于实现)

b。通用(在大多数情况下均可运行,与操作系统,Java供应商,JVM版本等无关)

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

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

相关文章

php新特性:trait 关键字使用

1、trait关键字&#xff1a;含义【特性】 1.1 和require include 区别&#xff1a; 后两者需要 实例化一个类或者静态调用&#xff0c;而trait相当于继承&#xff0c;但又不是extends关键字&#xff0c;它解决了单继承。 2、目的&#xff1a;解决php的单继承问题 3、使用关键词…

重磅!2020年度人类社会发展十大科学问题发布

来源&#xff1a;科技导报 在11月9日下午的第二届世界科技与发展论坛的闭幕式上&#xff0c;中国工程院院士、清华大学教授、《Research》编委周济和《柳叶刀》主编&#xff0c;爱思唯尔柳叶刀系列期刊总编辑、理查德霍顿共同发布了“2020年度人类社会发展十大科学问题”。本次…

mysql表不存在_MySQL表不存在。但这确实(或者应该如此)

我确实更改了MySQL安装的datadir&#xff0c;并按照某些步骤运行良好。我曾经动过的每个基地都正确地移动了&#xff0c;但是一个。我可以连接和使用数据库&#xff0c;即使SHOW TABLES也会正确返回所有表&#xff0c;并且每个表的文件都存在于mysql数据目录中。但是&#xff0…

前端导出excel文件带样式_vue前端使用xlsx导出数据到excel中--最简单的方式

最新项目中需要将页面数据导出到excel中&#xff0c;首先想到的就是度娘&#xff0c;得到的结果都是千篇一律&#xff0c;答案都是你复制我我复制你的&#xff0c;虽然能解决问题&#xff0c;但是这个过程也太复杂。既然无法改变&#xff0c;那就只好插手你的生活了。废话少说&…

C#使用反射根据实体生成sql语句(添加和批量添加)

最近碰上这个一个需求&#xff0c;需要写一个接口&#xff0c;将穿进来的参数&#xff0c;存储到数据库里&#xff0c;但是存到哪个库&#xff0c;哪个表&#xff0c;不确定&#xff0c;需要根据参数去判断&#xff0c;但数据结构是固定的&#xff0c;因为表名不是固定的&#…

7种情绪,人类心智的通用模块

来源&#xff1a;混沌巡洋舰1859年&#xff0c;达尔文以一个挑衅性的断言结束了他的《物种起源》&#xff0c;那就是‘人类的起源和他的历史将会被&#xff08;进化&#xff09;点亮’。在他的后期著作《人类的由来》(1和《人类与动物的情感表达》中&#xff0c;达尔文阐明了人…

gitbook mysql_使用Gitbook做笔记

一、安装# 通过npm全局安装npm install gitbook-cli -g# 查看版本gitbook --version二、创建一本书2.1 本地创建# 创建一个文件夹mkdir mysql-note# 初始化cd mysql-notegitbook init# 会创建两个文件# README.md 书皮# SUMMARY.md 目录# 从本地打开这本书gitbook serve# 将md文…

python map函数返回类型_使用map和lambda函数发送两个参数并返回两个值

因为您说您只需要一个模型&#xff0c;而不是每个值都需要一个新模型&#xff0c;所以这相当简单。更改&#xff1a;hnd map(lambda (valua): function_f(valua), list_value)致&#xff1a;model ... initialize a model that will be passed to every call ...hnd map(lam…

03、数据类型(02)

字典&#xff08;dict&#xff09; 字典是一种映射型的数据类型&#xff0c;每个元素成对出现&#xff0c;即key- value,每对元素key 和 value“&#xff1a;”冒号分开&#xff0c;元素之间用逗号隔开&#xff0c;整个字典包括子在{}中。 字典中的“key”必须是不可变类型&am…

器官复刻、脑机接口、电子皮肤…这些前沿科学或改写人类未来

来源&#xff1a;MEMS“2020年&#xff0c;新冠疫情爆发&#xff0c;面对困境&#xff0c;我们采取的行动将很可能改写这个时代。” 11月7日&#xff0c;2020腾讯科学WE大会线上举行。腾讯首席探索官网大为在开场演讲中表示&#xff0c;前沿科学突破能帮助我们做好准备拥抱未来…

pythongui管理系统项目_Python实现GUI学生信息管理系统

本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下项目环境&#xff1a;软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述&#xff1a;①Glade3设计用户的登录窗口&#xff0c;功能主窗口…

mysql8 修改加密方式_mysql8修改密码加密方式

mysql8用navicat可视化连接会报错加密方式错误&#xff0c;想要连接mysql8有两种方式1&#xff1a;安装MySQL8客户端2&#xff1a;修改MySQL8的密码加密方式我采用的是第二种&#xff0c;因为服务器上是MySQL8&#xff0c;而我本地是MySQL5&#xff0c;不想在装一个MySQL8&…

Python 操作Excel文件

https://blog.csdn.net/weixin_36279318/article/details/79151225转载于:https://www.cnblogs.com/wu-chao/p/8689120.html

GPT-3:人工智能的新突破

来源&#xff1a;王宏琳科学网博客在过去几个月里&#xff0c;占据海外科技新闻头条主导地位的、人工智能领域最令人兴奋的新事物之一是GPT-3——OpenAI的新的文本生成程序&#xff0c;一种由神经网络驱动的语言模型&#xff0c;一个根据人类用户的提示自动生成文本的人工智能引…

python童年_300行Python代码实现俄罗斯方块,致敬逝去的童年

原标题&#xff1a;300行Python代码实现俄罗斯方块&#xff0c;致敬逝去的童年本文代码基于 python3.6 和 pygame1.9.4。俄罗斯方块是儿时最经典的游戏之一&#xff0c;刚开始接触 pygame 的时候就想写一个俄罗斯方块。但是想到旋转&#xff0c;停靠&#xff0c;消除等操作&…

安装织梦系统

织梦系统安装 步骤 1 mkdir /datayum -y install httpd*yum -y install mysql-community-release-el7-5.noarch.rpm wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm yum -y install mysql-community-release-el7-5.noarch.rpmyum install mysql-servers…

把 mysql 整个加载进内存磁盘中_MySQL 缓冲池 是什么?

Mysql 中数据是要落盘的&#xff0c;这点大家都知道。读写磁盘速度是很慢的&#xff0c;尤其和内存比起来更是没的说。但是&#xff0c;我们平时在执行 SQL 时&#xff0c;无论写操作还是读操作都能很快得到结果&#xff0c;并没有预想中的那么慢。可能你会说我有索引啊&#x…

Cell重磅:记忆研究的突破进展!在诺奖成果基础上,用“全光学”组合来“操纵记忆”...

来源&#xff1a;brainnews这项发表在《细胞》杂志上的研究&#xff0c;解释了研究人员如何利用双光子钙成像和双光子光遗传学的“全光学”组合&#xff0c;同时读写小鼠“位置细胞”&#xff08;神经元的一种&#xff09;中的活动&#xff0c;而这种细胞可以在虚拟现实环境中进…

mysql like 多个条件_千万级MySQL数据库这样建索引可以让你的数据库飞起来.........

创建索引常用规则1、表的主键、外键必须有索引&#xff1b;2、数据量超过300的表应该有索引&#xff1b;3、经常与其他表进行连接的表&#xff0c;在连接字段上应该建立索引&#xff1b;4、经常出现在Where子句中的字段&#xff0c;特别是大表的字段&#xff0c;应该建立索引&a…

mysql主从配置访问_Mysql主从配置,实现读写分离

大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&#xff0c;如此多的数据库连接操作&#xff0c;数据库必然会崩溃&…