打破冷漠僵局文章_研究僵局–第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/351476.shtml

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

相关文章

七牛云php20m文件上传不了,七牛云存储 - 用php上传图片,我在本地测试,用php 接口,不成功...

七牛反馈显示信息说明已经成功了&#xff0c;但是在七牛空间显示的文件却不完整请问这是为什么啊&#xff1f;&#xff01;&#xff01;测试文件如下&#xff0c;本地localhost测试&#xff1a;require_once("qiniu/io.php");require_once("qiniu/rs.php")…

洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告

P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串&#xff0c;定义两个串相等为“长度相同&#xff0c;且一个串每个数加某个数与另一个串完全相同”&#xff0c;求所有串的最长公共子串&#xff0c;每个串长\(\le 101\)&#xff0c;值域\(\in [0,1864]\) 先差分一下&…

linux和windows的进程的虚拟地址空间

昨晚看到了深夜&#xff0c;终于对进程的虚拟地址空间有了个大致的了解&#xff0c;很激动&#xff0c;也很欣慰。回头想来&#xff0c;一个程序员&#xff0c;真的应该知道这些知识&#xff0c;否则还真不太称职。 首先告诉大家&#xff0c;我后面提到的这些知识在《windows核…

安装Red Hat Container Development Kit 2.2版本

当应用程序开发人员或架构师负责探索容器化应用程序提供的可能性时&#xff0c;没有比Red Hat容器开发套件&#xff08;CDK&#xff09;容易的了。 Red Hat CDK具有本地OSX&#xff0c;Linux或Windows环境所需的所有Cloud工具&#xff0c;并且已预先配置了一些容器供您浏览。 …

php_sapi常量,PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测

php_sapi_name() 是用来检测PHP运行环境的函数。该函数返回一个描述PHP与WEB服务器接口的小写字符串。例如&#xff1a;aolserver,apache,apache2filter,apache2handler,caudium,cgi(until PHP 5.3),cgi-fcgi,cli,continuity,embed,isapi,litespeed,milter,nsapi,phttpd,pi3web…

怎么学习正则表达式?(正则的使用心得)

以前使用正则是不会自己去学或者去了解怎么实现正则的语法的&#xff0c;感觉好难懂的样子&#xff0c;于是拖到现在 其实正则不是我想象中的那么难&#xff0c;至少入门还是比较简单。我刚学习了一些比较简单的&#xff0c;谈谈我对正则的理解以及使用心得&#xff0c;希望能帮…

java+解析占位符,如何告诉Spring使用Java映射来解析属性占位符?

Spring提供了一个MapPropertySource,您可以在ApplicationContext的环境中注册(您需要一个大多数ApplicationContext实现提供的ConfigurableEnvironment).解析器(按顺序)使用这些已注册的PropertySource值来查找占位符名称的值.这是一个完整的例子&#xff1a;ConfigurationComp…

UOJ207 共价大爷游长沙

考虑到路径是有向的&#xff0c;不是很好维护。 如果路径无向的话&#xff0c;可以直接转化为链加和查询操作。 既然有向的话&#xff0c;不妨考虑一波hash。 对于一组询问x,y&#xff0c;可以把树划分为两颗子树。 合法显然需要满足 x子树的起点的hashy子树的终点的hash x子树…

mysql select null 0,查询值中为NULL,在MySQL中产生0.00

我有一个动态编写的查询(通过Joomla的OO PHP)将一些值插入MySQL数据库.用户填写的表单上有一个字段用于金额,如果它们留空,我希望进入系统的值为NULL.我已经将错误日志中的查询写出来了;这是查询的样子&#xff1a;INSERT INTO arrc_Voucher(VoucherNbr,securityCode,sequentia…

oracle adf_Oracle ADF移动世界! 你好!

oracle adf您好&#xff0c;ADF Mobile&#xff0c;世界&#xff01; 您可能已经知道... ADF Mobile在这里&#xff01; 以下是一些链接&#xff0c;这些链接会让您有宾至如归的感觉。 ADF Mobile主页&#xff1a; http://www.oracle.com/technetwork/developer-tools/adf/o…

线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel

题面&#xff1a;P2894 [USACO08FEB]酒店Hotel 题解&#xff1a;和基础的线段树操作差别不是很大&#xff0c;就是在传统的线段树基础上多维护一段区间最长的合法前驱&#xff08;h_&#xff09;&#xff0c;最长合法后驱&#xff08;t_&#xff09;&#xff0c;一段中最长的合…

Linux内存管理详解

前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间&#xff0c;但是还是有很多问题不是很清楚&#xff0c;最近又花了一些时间复习了一下&#xff0c;在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程…

JavaOne 2016 Essentials:7个您不容错过的事件和会话

参加JavaOne吗&#xff1f; 确保您不会错过这些活动 又到了每年的这个时候。 旧金山一年一度的Java假期即将来临&#xff0c;全市发生了超过400场会议和活动。 由于所有这些内容和新体验都一次发生&#xff0c;因此很容易就无法跟踪正在发生的事情。 在这篇文章中&#xff0c…

任务18:控制反转

控制反转 实现你的依赖&#xff0c;采用什么依赖&#xff0c;不由你自己决定&#xff0c;这个控制交给IOC容器。 这里所有的实现都不由你自己决定&#xff0c;我们只需要传给你就可以了。谁来传呢&#xff1f;容器来传给他 内存的Repository&#xff0c;这里实现的比较简单。 这…

程序的重定位问题(程序装入)

在多道程序环境下&#xff0c;要使程序运行&#xff0c;必须先为程序创建进程。而创建进程的第一件事就是&#xff1a;将程序和数据装入内存。如何将一个用户源程序变成可在内存中执行的程序&#xff0c;通常都要进过几个步骤&#xff1a;1.编译&#xff1a;由compiler将源程序…

matlab频响优化,MATLAB中关于频响图函数最优化的程序问题

我是一名大四的学生,现在正在做毕业设计,因MATLAB从未学过,也是边学边做,我需要求出IGv函数的频率响应图,因IGv的表达式很复杂,这里我没列出,在下面的程序中有的,以下是我的程序,请高手帮我看看程序有什么问题哈,万分感谢!%%igmax is global maximumIgmin1000000000;%%exmperim…

杂项-事务:OLTP(联机事务处理过程)

ylbtech-杂项-事务&#xff1a;OLTP&#xff08;联机事务处理过程&#xff09;On-Line Transaction Processing联机事务处理过程(OLTP)也称为面向交易的处理过程&#xff0c;其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理&#xff0c;并在很短的时间内给出处理…

dvd管理器java,简单DVD管理-java练习题

问题描述为某音像店开发一个迷你DVD管理器&#xff0c;最多可存6张DVD,实现碟片的管理。管理器具备的功能主要有&#xff1a;1、查看DVD信息。菜单选择查看功能&#xff0c;展示DVD的信息。2、新增DVD信息选择新增功能&#xff0c;根据提示输入新增的DVD名称&#xff0c;添加到…

从hello world 说程序运行机制

开篇 学习任何一门编程语言&#xff0c;都会从hello world 开始。对于一门从未接触过的语言&#xff0c;在短时间内我们都能用这种语言写出它的hello world。 然而&#xff0c;对于hello world 这个简单程序的内部运行机制&#xff0c;我相信还有很多人都不是很清楚。hello wor…

webapp支持什么数据库_数据库和Webapp安全

webapp支持什么数据库威胁模型 这是根据我网站上的快速参考页松散地讨论数据库和webapp安全的问题。 该页面变得笨拙&#xff0c;并且使读者无法轻松地与我或其他人进行交互。 威胁模型 所有安全分析必须从检查威胁模型开始。 威胁模型要求您回答四个问题&#xff1a; 我要…