研究僵局–第2部分

调查死锁时最重要的要求之一就是要研究死锁。 在我的上一个博客中,我编写了一个名为DeadlockDemo代码,该代码使用一堆线程在一系列银行帐户之间转移随机数,然后陷入僵局。

该博客运行该代码以演示获取线程转储的几种方法。 线程转储只是一个报告,显示给定时间点所有应用程序线程的状态。 这样做的好处是,它包含各种信息,可以让您弄清楚为什么会出现死锁,并希望可以解决此问题,但稍后会介绍更多。

杀死SIGQUIT

如果Java应用程序在UNIX计算机上运行,​​则抢占线程转储的第一种方法(可能是最简单的方法)是通过终端使用UNIX kill命令。

为此,请先使用psgrep命令掌握应用程序的进程标识符或PID。 例如,如果您键入:

ps –e | grep java

…然后您将生成一个类似于以下内容的列表:

74941 ttys000    0:00.01 grep java
70201 ttys004    1:00.89 /usr/bin/java threads.deadlock.DeadlockDemo

在这种情况下, DeadlockDemo的PID是70201,它是从上面的输出中获取的。 请注意,不同类型的UNIX或不同的ps命令行参数可能会产生略有不同的结果,因此请检查man页。

掌握了PID之后,使用它发出kill SIGQUIT命令:

kill -3 70201

kill命令是UNIX命令,用于处理不需要的进程

尽管上面的-3是SIGQUIT(等效于键盘ctrl-D)参数,但是,如果Java收到此信号,它将不会退出,它将在其关联的终端上显示线程转储。 然后,您可以抓住它并将其复制到文本文件中以进行进一步分析。

jstack

如果您使用Windows,则UNIX命令行不可用。 为了解决这个问题,Java附带了一个执行kill等效功能的实用程序。 这称为jstack ,在UNIX和Windows上均可用。 它的用法与上面演示的kill命令相同:

jstack <PID>

在Windows中获取PID是打开Windows任务管理器的问题。 任务管理器默认情况下不显示PID,因此您需要使用view菜单选项并在“ 选择列”对话框中选中“ PID(过程标识符)”选项来更新其设置。

接下来,只需检查进程列表并找到合适的java.exe实例即可。

读取java.exe的PID并将其用作jstack参数,如下所示:

jstack 3492

命令完成后,您可以保留输出并将其复制到文本文件中以进行进一步分析。

jVisualVM

jVisualVM是获取线程转储的“ Rolls Royce”方法。 它是Oracle提供的工具,使您可以掌握有关Java VM的许多不同信息。 这包括堆转储,CPU使用率,内存配置文件等等。

在Windows上,jVisualVM的实际程序名称是jvisualvmjvisualvm.exe 。 运行后,您将看到以下内容:

要获取线程转储,请在左侧的应用程序面板中找到您的应用程序 ,然后右键单击并选择:“ Thread Dump”。

然后在jvisualvm的右侧窗格中显示一个线程转储,如下所示:

请注意,在连接到本地VM时,我多次看到jvisualvm挂起。 发生这种情况时,请确保将其代理设置设置为“ 无代理”

获得了线程转储后,我的下一个博客现在将使用它来研究示例DeadlockDemo代码的问题所在。

有关更多信息,请参阅本系列中的其他博客 。

参考: 调查死锁-第2部分:在Captain Debug的Blog博客上从JCG合作伙伴 Roger Hughes 获得线程转储 。

翻译自: https://www.javacodegeeks.com/2012/10/investigating-deadlocks-part-2.html

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

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

相关文章

从0开始接触html--第一天学习内容总结

第一天 总结: h1-h6 p 段落 hr br有序 ol li 无序 ul li 定义列表 dl dt dd块级元素&#xff1a;独占一行&#xff0c;h1-h6 p hr div行内元素&#xff1a;共占一行, em和i strong和b u del和s span块级分区元素&#xff1a;div header nav article footer行内分区元素&#…

连锁便利店管理系统有什么用

连锁便利店管理系统对于连锁便利店的运营和管理非常有用。以下是一些常见的用途&#xff1a; 1. 库存管理&#xff1a;连锁便利店通常需要管理多个门店的库存&#xff0c;管理系统可以帮助实时掌握各个门店的库存情况&#xff0c;包括商品数量、进货记录、库存调拨等。这样可以…

经常使用meta标签属性

《meta》 1.Keywords (keyword)说明&#xff1a;告诉搜索引擎你网页的keyword是什么。 使用方法&#xff1a;<meta name"keywords" content"SEO优化,SEO优化教程,站点优化,搜索引擎优化教程"> 2. Description (网页描写叙述)说明&#xff1a;Descrip…

浏览器打印设置横向打印_爱普生打印机无线连接设置

1、首先&#xff0c;把epsonl385打印机插上电源通电&#xff0c;待自检完成后&#xff0c;便可以设置。如果用户家里的无线路由器带有WPS(Wi-Fi Protected Setup)或QSS(又称快速安全设置)功能&#xff0c;那就简单多了。2、通过WPS或QSS无线路由器按钮连接&#xff0c;给无线路…

linux python定时任务调度,Python下定时任务框架APScheduler的使用

1.APScheduler简介&#xff1a;APScheduler是Python的一个定时任务框架&#xff0c;可以很方便的满足用户定时执行或者周期执行任务的需求&#xff0c;它提供了基于日期date、固定时间间隔interval 、以及类似于Linux上的定时任务crontab类型的定时任务。并且该框架不仅可以添加…

图片和文件上传js剖析

/** * 商户资质信息模块js * * 涉及页面组件 { * 上传组件&#xff08;UploadFileComponent&#xff09; * } * * * 初始化工具&#xff08;init&#xff09; * * Author:Waver */var qualificationInfoModule (function() { // 上传文件类型 var UPLOAD_FILE_TYPE…

研究僵局–第1部分

我敢肯定我们都去过那里&#xff1a;太晚了&#xff0c;您饿了&#xff0c;服务器已挂起&#xff0c;或者应用程序正在以蜗牛的速度运行&#xff0c;并且有人喘着气想要您解决问题&#xff0c;然后再去解决。 您的应用程序意外挂起的可能原因之一是称为死锁的线程问题。 无需赘…

前端的学习之旅

Html学习笔记1 特殊符号&#xff1a;html中对换行缩进空格不敏感&#xff0c;都只会解析成一个空格 空格&#xff1a; < : < > :$gt; 版权符号&#xff1a;&copy&#xff1b; 表格&#xff1a;1 表示表格&#xff1a;table表示表格 tr&#xff1a;…

使用Vue.js和Axios从第三方API获取数据 — SitePoint

更多的往往不是&#xff0c;建立你的JavaScript应用程序时&#xff0c;你会想把数据从远程源或消耗一个[ API ]&#xff08;https&#xff1a;/ /恩。维基百科。org /维基/ application_programming_interface&#xff09;。我最近看了一些[公开]&#xff08;https://github.co…

区位码怎么知道点阵里的起始点_自身免疫疾病的GAPS起始饮食改良版

写这篇文章的原因如果您已经关注我的博客一段时间&#xff0c;您知道我开始使用GAPS饮食&#xff0c;然后转换到AIP饮食&#xff0c;因为我仍在努力治疗炎症和自身免疫的发作。 Katy Haldiman 有同样的经历&#xff0c;我们并不孤单。许多患有自身免疫性疾病的人在 GAPS 上挣扎…

Linux存储保护,谈谈Linux中的存储保护

谈谈Linux中的存储保护以下讨论的内容是以i386平台为基础的Linux将4G的地址划分为用户空间和内核空间两部分。在Linux内核的低版本中(2。0。X)&#xff0c;通常0-3G为用户空间&#xff0c;3G-4G为内核空间。这个分界点是可以可以改动的。正是这个分界点的存在&#xff0c;限制了…

004-JQuery属性

添加与删除属性CSS类HTML代码/文本/值添加与删除属性 attr(name|properties|key,value|fn) &#xff1a;设置或返回被选元素的属性值 removeAttr(name) &#xff1a;从每一个匹配的元素中删除name属性 prop(name|properties|key,value|fn) &#xff1a;获取在匹配的元素集中的第…

预热您的JVM –超快速生产服务器和IDE

几个月前&#xff0c;我正在阅读Java中的复杂事件处理以及实现低延迟的方法。 在我长达一个小时的研究结束时&#xff0c;我发现即使您的应用程序编写正确并且您的方法主要在0&#xff08;log n&#xff09;的时间内运行&#xff0c;并且您正在使用某些前沿的硬件解决方案&…

微信小程序APP(商超营销类)经验总结

项目介绍 这是一款主打门店营销的小程序。包括首页、门店、营销、个人设置、登录、数据统计展示、营销设置等。 本来要独立完成整个项目&#xff0c;包括前后端一套的&#xff0c;有些意外因素&#xff0c;项目临时收尾&#xff08;说明&#xff1a;只完成了前端的部分&#…

excel不显示0_Excel数字过长不能完整显示?超长数字变为0

Excel中计算规则和限制设定数值精确度为15位&#xff01;超过15位后&#xff0c;数字会显示为0excel数字超过15位&#xff0c;会显示为0&#xff0c;超过10位&#xff0c;默认采用科学计数法显示1、如何解决超长数字输入&#xff0c;全部显示问题&#xff1f;&#xff08;单元格…

Android天气预报设计

——嵌入式软件开发 名字功能模块代码行数备注谢灿辉Widget200桌面小程序李杨敏GPS定位&#xff0c;百度地图API100-150获取当前所在城市丁小芳城市选择Activity&#xff0c;天气API获取天气100-200包括数据库交互本软件是一个天气类应用软件&#xff0c;带有widget&#xff0c…

linux vi后不保存退出,linux下退出VI的方法:不保存退出

当编辑完文件&#xff0c;准备退出Vi返回到shell时&#xff0c;可以使用以下几种方法之一。在命令模式中&#xff0c;连按两次大写字母Z&#xff0c;若当前编辑的文件曾被修改过&#xff0c;则Vi保存该文件后退出&#xff0c;返回到shell&#xff1b;若当前编辑的文件没被修改过…

算法笔记_164:算法提高 最小方差生成树(Java)

目录 1 问题描述 2 解决方案 1 问题描述 问题描述给定带权无向图&#xff0c;求出一颗方差最小的生成树。输入格式输入多组测试数据。第一行为N,M&#xff0c;依次是点数和边数。接下来M行&#xff0c;每行三个整数U,V,W&#xff0c;代表连接U,V的边&#xff0c;和权值W。保证图…

番石榴分配器vs StringUtils

因此&#xff0c;我最近写了一篇有关旧的&#xff0c;可靠的Apache Commons StringUtils的文章 &#xff0c;该文章引起了一些评论&#xff0c;其中之一是Google Guava提供了更好的连接和拆分字符串的机制。 我必须承认&#xff0c;这是我尚未探索的番石榴的一个角落。 因此&am…

layui数据表格(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)

表格展示神器之一&#xff1a;layui表格 前言&#xff1a;在写后台管理系统中使用最多的就是表格数据展示了&#xff0c;使用表格组件能提高大量的开发效率&#xff0c;目前主流的数据表格组件有bootstrap table、layui table、easyUI table等.... 博主个人比较倾向于layui&am…