程序死循环、死锁问题定位
程序死循环、死锁问题定位
在开发过程中,可能由于代码设计问题导致出现了死循环或者死锁的问题,使服务器CPU负载飙高从而导致系统运行缓慢,因此要特别注意防止死循环和死锁的发生。如监控服务器状态时,如果发现CPU负载或利用率飙得很高,这时候就要定位出可能出现的问题,这是在开发中非常重要的能力之一。
主要方法:top 、jstack
定位死循环
模拟一段死循环代码(我这里参考了其他博客的代码来做实验–链接)
打jar包上传到Linux服务端(usr/local/jar)
mvn clean package -Dmaven.test.skip
- 运行jar包
nohup java -jar monitor_tuning-0.0.1-SNAPSHOT.jar &
- 访问死循环方法对应的url地址执行死循环代码,top查看运行的jar的进程ID
可以看到负载和cpu利用率都飙得很高
- 问题排查,实验jstack获取对应进程的线程堆栈信息,下载到本地查看
jstack 108196 >108196.txt
rz 108196.txt
top -p 108196 -H
查看进程中cpu利用率最高的线程ID记录下来在jstack导出的文件中查看对应信息
- 使用
printf "%x" 108262
转化为16进制然后在jstack导出的文件中查找对应线程ID的信息
- 通过在
jstack
导出的文件中查看这个线程的方法栈信息可以确定到运行的方法,定位到问题所在,分析代码是否出现了死循环或者是其他原因。
定位死锁
- 模拟一段死锁代码
/*** 死锁* */@RequestMapping("/deadlock")public String deadlock(){new Thread(()->{synchronized(lock1) {try {Thread.sleep(1000);}catch(Exception e) {}synchronized(lock2) {System.out.println("Thread1 over");}}}) .start();new Thread(()->{synchronized(lock2) {try {Thread.sleep(1000);}catch(Exception e) {}synchronized(lock1) {System.out.println("Thread2 over");}}}) .start();return "deadlock";}
- 访问该路径执行这段代码
- jps查看对应java进程信息
jstack 109176 > 109176.txt
将其导出并sz
到本地查看
可以看到jstack
导出的文件记录了死锁,并将发生死锁的两个线程的详细信息记录下来,很清除的就能定位到死锁的位置,很好很强大!
总结:
当发现服务器CPU负载利用率很高时,分析可能出现了死循环或者死锁,通过工具来分析定位问题所在。
死循环:
1、用top查看cpu利用率最高的进程,并用jstack将其进程信息文件导出,
2、用top -p pid -H 查看进程中cpu占用率高的线程,在jstack文件中查询该线程的方法栈信息以定位到问题代码。
死锁:
1、jstack导出进程信息后,查看出现死锁的线程,
2、定位线程中出现死锁的方法,重新设计该段代码排除掉死锁。
补充:导致CPU负载变高的还有其他的原因如频繁的磁盘IO导致进程阻塞,导致CPU利用率飙高的原因也有可能是频繁的GC,具体问题具体解决,都可以使用工具来定位到问题所在。
程序死循环、死锁问题定位相关推荐
- 微信小程序:获取地理定位和显示相应的城市名称。
最近在看微信小程序,遇到地理定位显示城市名称的问题.本文就是记录这一过程. 解决方案 ...
- api 定位 微信小程序 精度_聊聊微信小程序内置地图定位的精确性
前段时间,一个客户说到,我们给做的 菜齐了小程序 商家定位的地图不准确!用户想要去小程序指定的商家,从微信地图入口导航到所需要的地点差了有上百米! 上百米,这距离可够地远的,这怎么可能啊?我们一一查看 ...
- 企业微信小程序_获取准确定位的方法及解决定位不准确的问题
文章目录 一.经验分享 1. 微信api现状 2. 解决方案 3. 适用场景 二.小程序集成腾讯定位服务 2.1. 注册腾讯开发者 2.2. 创建应用 2.3. 添加key 2.4. 下载sdk 2. ...
- 微信小程序_map组件实现定位
微信小程序_map组件实现定位 map组件 这是官方提供的地图组件,很多复杂的功能我暂时没有接触到,而且有的效果似乎只有企业可以使用.我在这里就简单的实现一下map组件的定位用户的位置的功能. 下面的 ...
- 程序员该如何定位?看这四大方向
宽泛的意义上讲,程序员是这样一群人:他们用某种语言或技术,开发某种软件产品(系统),解决特定现实领域的问题. 有了这个定义,我们就可以来讨论程序员的几种常见定位: 解决某类问题的专业人士 软件架构与设 ...
- DOS死机客星,能打破程序死循环,按住Ctrl +Esc即可使死掉的程序立即返回到Dos Shell
//--DOS死机客星,能打破程序死循环,按住Ctrl +Esc即可使死掉的程序立即返回到Dos Shell code segment assume cs:code,ds:code org 100h ...
- Android Native程序crash的一些定位方法简介
Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...
- 程序员自己的定位以及怪物追踪寻路AI (转)
先从程序员的思想定位开始.程序员是什么,其实我们不是什么高深摸测的数学家,能使用多少种算法,能把计算机玩得那么厉害,其实程序的本质就是一个翻译者,是一个将人类的行为描述成计算机语言的翻译者.在这个解释 ...
- 微信小程序调用高德api定位当前经纬度,根据城市名获取对应经纬度
最近写小程序有一个首页关于定位功能,指定高德API,话不多说,上图: 首先小程序需要先设置定位提示语,在mainfest.json中添加配置scope.userLocation: "mp-w ...
- 开源一个基于微信小程序的蓝牙室内定位软件(附下载链接)
文章目录 1. 运行环境要求 2. 软件功能及程序说明 2.1 软件组成 2.2 主要功能 2.3 文件及函数功能说明 3. 软件设计及操作说明 4. 完整版代码获取 1. 运行环境要求 软件运行环境 ...
最新文章
- Scrapy学习篇(九)之文件与图片下载
- redis学习(七)jedis客户端
- 环形数组最大子数组之和
- linux which命令的使用示例
- HDU 1042 N!
- android 透明状态栏方法及其适配键盘上推(一)
- oracle两表,有什么方法对Oracle两张表的数据比较呢?
- 经纬度转换,度转度分秒,度分秒转为度,前端js
- 5.3 - 抽屉新热榜
- 零预算也能用SEO技巧达到Google自然搜寻结果第1名
- 一点接入全网互通,企业上云就用它!
- c语言操作符的自我总结hhhhhhhhh
- 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
- 移动流量转赠给好友_中国移动怎样转赠手机流量?月结流量用不完怎办
- (邱维声)高等代数课程笔记:基,维数与坐标
- 能耗指标与数据中心规模-孙长青
- 圣人、君子、小人、庸人的划分标准
- [论文评析]基于人体姿态识别的立定跳远 动作智能评估系统
- 移动端 transition动画函数的封装(仿Zepto)以及 requestAnimationFrame动画函数封装(仿jQuery)...
- 专注力的重要性和提高的方法
热门文章
- python读取crl吊销列表
- DOS命令之cls:清屏
- Python的高级图像处理
- Android 获取本地音乐生成对象,获取对应audio文件中的专辑图片
- 【后量子密码】CRYSTALS-KYBER 算法(一):MLWE 问题与NTT(附源码分析)
- 曝光SEO高手藏在内心的SEO秘籍
- 3月6日云栖精选夜读 | 三七女生节,解密阿里女程序员们的代码诗!...
- 实验:工具类 God【 3.1.2 抽象依赖原则的使能工具】
- TZOJ5942: 山区建小学(二维dp+枚举)
- 小飞鱼通达二开 为流程中心数据选择控件增加数据源(图文)