当前位置:首页 > 行业知识 > 综合

一文学会java死锁和cpu

关注:85 发布时间:2021-11-04 15:13:05

做一个积极的人

编码,改变bug,提升自己

我有一个天堂,以编程为主,春天开花

一个工人要想把工作做好,首先必须磨利他的工具

00 本文简介

作为的一个技术程或者说是一头攻城狮子,你必须对下面两个问题有所了解。也许你在实际工作或面试中遇到过:

第一个问题:java死锁如何排查和解决?

第二个问题:服务器cpu占用率高达到排查和解决?

第三个问题:有哪些工具能够快速查看线程使用情况?

本文总结了这三个问题,并通过实例加以说明。精彩干货不容错过!

前戏那么多,高潮也会很多。干得好,我们言归正传,开船吧,我们走!

01 java死锁排查和解决

要排除故障并解决死锁,首先考虑三个问题:

1. 什么是死锁?

2. 为什么会出现死锁?

3. 怎么排查代码中出现了死锁?

4. 如何避免写出死锁的代码?

作为一个技术员(工程师),当有问题的时候,可以尽快解决。但是在学习技术知识的时候,还是脚踏实地,多问为什么,一个好问题就能让你思考,一定要锻炼自己这方面的能力,这样才能更好的理解和掌握知识,探索/触及更深的地方。

1、啥是死锁?

死锁是指在两个或多个进程执行过程中,由于争夺资源或相互通信而导致的阻塞现象。没有外力,他们就无法前进。这个时候说系统处于死锁状态或者系统出现死锁,这些一直在互相等待的进程就叫做死锁进程。【搜索百科:死锁】

注:进程和线程都可以发生死锁,只要满足死锁的条件!

2、为啥子会出现死锁?

从以上概念,我们知道

(1)必须有两个或多个进程(线程)

(2)必须有竞争资源

3、怎么排查代码中出现了死锁?【重点来了】

首先,整个死锁代码,看例子:

执行上述代码后,会出现死锁,因此故障排除方法如下:

第一个姿势:使用 jps jstack

一:在windons命令窗口,使用jps-l[如果你不用jps,请自己查资料]

二:使用jstack-l 12316[如果您不能使用jstack,请自行检查信息]

第二个姿势:使用jconsole

在窗口中打开jconsole,jconsole是一个图形化的监控工具!

一:在windons命令窗口中,输出jconsole,如下所示:

二:选择线程的标签。

第三个姿势:使用java visual vm

在窗口中打开jvisuam,这是一个图形化的监控工具!

一:在windons命令窗口,输出jvisuam

二:仍然切换到线程的选项卡,并且有一个明显的提示!

4、如何避免死锁?

上面的

在谈了死锁的原因和三种检测和排除死锁的方法后,更重要的是如何避免死锁。如果编写的代码能够避免死锁,就不会有这样的故障排除过程。比较好是从源头控制问题,不要以后遇到问题就填坑。

我看了阿里巴巴比较新的开发协议,里面有避免死锁的说明,如下:

【强制】同时锁定多个资源、数据库表和对象时,需要保持一致的锁定顺序,否则可能会发生死锁。注意:线程1在更新之前需要依次锁定所有表a、b、c,所以线程2的锁定顺序也必须是a、b、c,否则可能会发生死锁。

02、java cpu 排查技巧

第一个姿势,步骤有点多,难度四星

平时多积累一点,这样遇到问题,求助的话就少了。如果实际开发中遇到cpu 问题,如何排除故障?如果你没有遇到这个问题,请思考10秒。如果遇到了,这个时候可以再复习。

一,用top命令查看高cpu消耗的pid

目前占据cup 的pid是3455。

二,通过jps找到当前用户下的java程序pid

执行jps -l可以打印出所有应用的pid,发现有一个pid和这个cpu用的id是一样的!我们就知道是哪种服务了。知道了相应的服务,接下来的分析步骤。

三,使用pidstat -p pid 1 3 -u -t

-p:指定流程编号

-u:默认参数,显示每个进程的cpu使用统计

-t:显示除了选择任务的线程的统计信息之外的附加信息

四,找到了cpu占用率高的线程tid。通过上图,发现3467的tid占用了很大的cpu

五,因为jstack命令的输出文件中记录的线程id是十六进制的。因此,我们首先将tid转换为十六进制表示,转换模式参见下图。

把3467转换成十六进制d8d,注意是小写!记下来,以后用。

六,通过jstack [-l] pid输出当前进程的线程信息

仪表流程图/温度/测试日志

七,找到tid对应的线程(输出线程id是十六进制),找到对应的代码,用命令找到,不要用肉眼对比,请思考具体的命令,给你一个展示的机会。

找到之后,分析一下这个线程在做什么,为什么会占用那么多cup资源。

ps:线程的几种状态描述如下:

新的,没有开始。不会出现在转储中。

runnable,在虚拟机中执行。

blocked,blocked,等待显示器锁定。

观察,无限期等待另一个线程执行特定的操作。

timed_wating,在有限的时间内等待另一个线程的特定操作。

终止,退出。

第二个姿势,待开发[奸笑脸]

这里省略了很多文字。

03 推荐两个高效排查问题工具

一:显示繁忙的java线程

地址:show-busy-java-threads:https://github.com/old tlee/有用-scripts/blob/master/docs/java . md #-show-busy-java-threads

简单的安装和使用过程:

show-busy-java-线程

上传服务器并解压缩

然后执行相应的命令

二:阿里的开源问题定位神器阿尔萨斯被用来定位问题。

网站地址:阿尔萨斯:https://alibaba.github.io/arthas/index.html

这个里面有很多命令。比如线程支持显示比较忙的前n个线程,一键打印栈。比较简单的线程-n 10可以打印比较忙的十个线程的快照,真的很高效。

介绍了定位神器阿尔萨斯的安装过程。如果你还没用过这个工具,建议你用一下。也许你会喜欢!

04 总结

这篇文章内容比较多,基本上是手持教程。希望能对你有所帮助。我也建议没有遇到过类似问题的伙伴,看完之后亲自实践操作流程。如果没有环境,他们可以尝试自己的方式做一个测试的例子。还是那句老话:不要眼高手低,看了和做了本质上两个概念,比较终收获的也一定不同。

05 彩蛋-另一个姿势

通过使用jstack,您还可以发现系统的代码性能问题

1.在压力测试期间,使用jps查找应用程序的pid

2.然后使用jstack输出压力测试期间应用的转储信息

3.在分析输出的日志文件中,block线程占用的空间比较大,这里可能存在性能问题。找到相应的代码分析

猜你喜欢

  • 家里养文竹的吉凶

    家里养文竹的吉凶78人支持

    你会在家里养什么植物?也许大多数人会在阳台养花,因为植物需要光合作用,但有些植物特别耐阴,适合每个人在室内养花。比如文竹,书房里大家养都没问题,让它适当受光就行了。如果在这…

  • 青蟹怎么保存

    青蟹怎么保存64人支持

    青蟹味道鲜美,营养丰富,但一旦死亡,其细菌就会繁殖并产生毒素。人吃了会引起食物中毒。常见症状包括恶心、呕吐、腹痛和腹泻。严重者,脱水、电解质紊乱、抽搐,甚至休克、昏迷、败…

  • 张国荣玻璃之情表达了什么

    张国荣玻璃之情表达了什么108人支持

    牵手来,空手去;来的安,去的也写意。哥哥的声音是永远怀念的声音。我抱住过,然而又失去!张国荣创作并演唱了《玻璃之情》,该歌曲收录在2003年7月发行的《一切随风》专辑中。在这本…

  • 怎么查看别人抖音点赞

    怎么查看别人抖音点赞101人支持

    玩tik tok的都知道tik tok是算法推荐显示的。然而,随着tik tok创作者和用户数量的不断增加,推荐机制也越来越严格。最近很多创意视频推荐都不理想。根据我总结的原因,不推荐…

  • 危机公关原则

    危机公关原则54人支持

    描述:随着互联网的迅速发展,信息的扩散及影响力开始不断增加,因此,企业需要非常注重企业危机公关这一块,接下来,小编就会在文中给网友们详细介绍一下企业危机公关的基本原则主要有…

  • ugc是什么意思

    ugc是什么意思36人支持

    我觉得很多自媒体朋友和我一样。你一定对这些名词和大v口里的词有点迷惑,不知道它们是什么意思,比如:什么是pgc,什么是ugc,什么是mcn,kol等等。每次看一些大v讲课,吐出这些话,感觉自…

  • 芝麻信用750分以上比例

    芝麻信用750分以上比例41人支持

    即使是普通人,支付宝芝麻信用的评分还是难以提高。很多人说申请支付宝积分后很高,甚至直接达到800分的水平。这是一个案例,但只是一个例子。如果你只是普通人,第一次用支付宝的…

  • 租微信号是拿来干嘛

    租微信号是拿来干嘛116人支持

    我们提醒很多年轻朋友,今天网上有各种各样的兼职机会,有些是真的,你可以通过自己的劳动赚点零花钱。有些是假的。他们不仅不给你钱,还骗你很多生活费。还有一些更可怕,如果你稍不…

  • 拼多多开店真赚钱吗?

    拼多多开店真赚钱吗?84人支持

    现在是互联网红利时代。很多创业项目只靠一台电脑甚至一部可以上网的手机就能赚钱,所以很多人乐于从互联网上寻找赚钱的方法。这两年在拼多多开店也是火。到底能不能赚钱?什么…

  • 马云花名叫什么?

    马云花名叫什么?100人支持

    业内众所周知,马云有一个武侠梦,他在阿里的花名是“风清”。去年马云沉迷于微电影《功守道》中的功夫,其主题曲也被命名为《风清扬》 ——。作为市值超过3万亿的大公司创始人,马…

  • 微信有没有夜间模式

    微信有没有夜间模式76人支持

    微信暗黑模式的设置很简单,只需要五个步骤。点击微信“我”,在“设置”中选择“通用”。在“常规”选项的“黑暗模式”中,可以设置黑暗模式。我们来看看详细的操作步骤。1.打开…

  • 喜欢红色的女人是什么性格

    喜欢红色的女人是什么性格215人支持

    好了,我们再来看看 《每天懂一点色彩心理学》 里讲的你喜欢的颜色和性格有关系哦,来看看红色吧。喜欢红色的人的基本性格外向型性格,激情,正义感强。喜欢红色的人红色是一种非…