java cpu过高排查_涨薪秘籍:JAVA项目排查cpu负载过高

背景

我负责的其中一个项目在空负载的情况下,CPU占用率依然保持着100%左右,线上、测试、开发的服务都一样;是什么导致的呢?在开发环境我查看了请求流量,这个流量可以忽略但CPU占用率一直在60%-100%之间浮动。

分析问题

流量可以忽略,但CPU占用依然极其高说明不是请求多导致的资源占用,原因应该是项目本身自发导致的;自发包括定时任务与死循环,而具体哪一段代码现在也确定不了。现在我们就可以借助原生的jdk分析工具来定位是项目哪块出现了问题(你可以用更高级的jprofilter等,一连接,问题一目了然),以下我就采用jdk自带工具jstack、jstat 、jmap等来逐步定位。

定位问题

  • 在Linux环境下用top查看cpu、内存等资源占用情况(可采用: top -p pid 具体查看某个应用)。发现pid=4179的java应用占用cpu很高
f4c46f33fb850dd486b00b6b0adb2ee8.png
  • 查看pid=4179的应用各个线程占用cpu的时间片情况:ps -mp 4179 -o THREAD,tid,time (ps -mp pid -o THREAD,tid,time)。发现tid =4528的线程一直长时间占有着cpu并且占用率达100%
843982e85f58149c3ededf679763eb03.png
  • 将 4528转为16进制,便于在堆栈信息中查询定位代码块:printf "%x" 4528,转成16进制为 11b0
94ceb74eff38f2147799dcff003d089e.png
  • 在堆栈信息中定位报错代码块:jstack 4179|grep 11b0 -A 30 ( jstack pid|grep TID(16进制) -A 30 )
55779c5d4104888b1a4019fe61197deb.png

总结

从堆栈信息中我们可以看到是 WAITING导致,这个说明有一个线程长时间占用资源,而其他线程一直处于等待的状态。最终定位出是在一个分布式锁实现的模块中有一个保持锁的代码块有问题。然后通过优化这个分布式锁最终解决了这个问题。通过此次优化,大大节省出了服务器资源(目前这个系统在线上是4台集群,相当于节省了1*4 个cpu,如果是一个上百甚至上千的集群,那么这个资源占用是无法想象的),最主要的是避免了这种情况对系统本身的影响,避免了对正常请求的阻塞。

最后送给大家一个美女啦程序员很辛苦的偶尔需要犒劳一下自己

9ed0bb97555f7ab5c74c1c048c261ec9.png

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

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

相关文章

理财app说明

cordova库和魔蝎库使用的比较多 另外一个使用比较多的就是腾讯的youtu的第三方库,友盟的app统计的功能也有用 推送上使用的有激光推送、魅族推送、小米推送 另外多任务处理方面,有使用blots的库转载于:https://www.cnblogs.com/istar/p/9673249.html

巧用css的border属性完成对图片编辑功能的性能优化

一、需求场景: 最近闲来无事,boss提出了一个要求,研究相关代码并完成一个关于编辑图片功能的性能优化,该功能的主要界面展示如下: 通过了几分钟的短暂试用,发现就是一个简单的裁剪并保存用户选择并上传的图…

『Balancing Act 树的重心』

树的重心 我们先来认识一下树的重心。 树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 根据树的重心的定义,我们可以通过树形DP来求解树的重心。 设\(Max_i\)代…

求数的绝对值一定是正数_人教版初中数学七年级上册绝对值公开课优质课课件教案视频...

绝对值(习题课)导学案(教师版)【教学目标】1、能利用绝对值的性质求值。 2、通过复习绝对值,让学生对绝对值的理解更加深透。 3、通过复习,让学生掌握利用绝对值的代数和几何意义,并学会灵活运用…

使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全

企业应用程序的常见要求是在登录页面后面保护所有JSF页面。 有时,您甚至希望在应用程序内部具有保护区,只有拥有特定角色的用户才能访问这些保护区。 Java EE标准附带实现受某些安全性约束保护的Web应用程序所需的所有方法。 在此博客文章中,…

java 十六进制转十进制_JAVA知识-分析JAVA中的重点和难点

Java中有很多内容在开发项目的过程中并不常用,但是却是很重要的部分,为了避免忘记,今天重新温习了一遍Java中的重点和难点,借此机会记录一下方便以后查找。本文主要分为以下几个部分:1.进制的相互转换2.Java中位运算符…

java运算符知识整理

赋值运算符: int a 0;a 2;System.out.println("a0"""".."a);int b 0;b2;System.out.println("b0""b2"".."b);int c 0;c-2;System.out.println("c0""c-2"".."c);int d 1;d*2;S…

开放才能进步!Angular和Wijmo一起走过的日子

Angular 已成为广受欢迎的前端框架。去年9月份,期待已久的 Angular2 的正式版发布之后,Angular 又迎来了新一轮热潮。伴随着 Angular 这一路走来,Wijmo 一直都是第一个全面支持各种版本 Angular 的JS控件库,为 Angular 用户提供着…

windows 检查cuda安装_Windows云主机GPU驱动-CUDA安装使用

IE安全相关配置如果打开浏览器无法正常下载,则需要设置Internet Explorer增强的安全配置。设置如下:打开"服务器管理器";点击"本地服务器";"IE增强的安全配置";选择"关闭"; 之…

镜像镜像–使用反射在运行时查看JVM内部

开发人员:Takipi会告诉您何时新代码在生产中中断– 了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面,它使我们使用的库可以与我们的代码进行交互,而无需对其进行硬编码的知识。…

UnicodeMath数学公式编码_翻译(Unicode Nearly Plain - Text Encoding of Mathematics Version 3)

目录 完整目录1. 简介2. 编码简单数学表达式2.1 分数2.2 上标和下标2.3 空白(空格)字符使用3. 编码其他数学表达式3.1 分隔符强烈推荐本文简明版UnicodeMath编码教程 本文为UnicodeMath官方文档的翻译,原文看这。翻译如有不准还请谅解&#x…

antd 表格树如何展开_如何分析工作,找出规律,使用excel大幅度提高工作效率...

在职场中,掌握一定的excel知识,有时候可以极大的提高工作效率,减少加班次数。但是有的人可能不知道如何去做,下面我使用一个我前几天遇到的工作场景,一步一步的来给大家展示一下,如何使用excel提高工作效率…

eclipse插件 tcp/iip monitor

http://huangrongyou.iteye.com/blog/1764041 转载于:https://www.cnblogs.com/chyxOne/p/9673784.html

Wijmo 更优美的jQuery UI部件集:复合图表(CompositeChart)

Wijmo的CompositeChart控件允许您使用一个Chart来分析和展现复杂的数据。相同的数据可以使用不同的可视化效果,不同的图表类型展现在一个图表内,使得用户可以从不同的角度,了解分析这组数据所表达的内容 。 本文将介绍如何使用Wijmo的Composi…

广联达2018模板算量步骤_广联达gtj2021实操案例,新增6大板块,快速提高算量效率...

对于从事造价行业的朋友来说,广联达软件是我们最经常用到的软件,不仅是因为广联达软件能够在提高工作效率,主要还是现在大数据下,广联达软件可以做到更精准、零失误广联达软件更新的也比较快,广联达GTJ2021版已经更新出…

鲜为人知的Java 8功能:广义目标类型推断

遍历Java 8功能列表 &#xff0c; 广义目标类型推断使我震惊&#xff0c;因为它是一个特别有趣&#xff0c;鲜为人知的瑰宝。 看起来Java语言设计人员将减轻过去使用泛型&#xff08;Java 5-7&#xff09;时遇到的某些痛苦。 让我们看看他们的例子&#xff1a; class List<…

谈谈技术原则,技术学习方法,代码阅读及其它

一、选用技术的原则比较规范的软件开发过程要到有限的几个公司才能学到。偶现在所采用的方法都是圡方法&#xff0c;主程序员&#xff0c;测试驱动&#xff0c;文档和代码写在一起&#xff0c;原型。但基本上坚持几个原则&#xff1a;在工作上以实用为主导&#xff0c;哪个实用…

python下载库报错_下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决...

前言最近在网上找了很多下载Crypto的方法&#xff0c;感觉作用都不算很大&#xff0c;然后自己瞎搞瞎搞就搞好了&#x1f605;&#xff0c;所以打算分享出来。直接pip下载或者Anaconda下载&#xff0c;Anaconda的话可以直接在官网上下载&#xff0c;pip就不说了&#xff0c;下载…

WPF中元素拖拽的两个实例

WPF中元素拖拽的两个实例 原文:WPF中元素拖拽的两个实例今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结&#xff0c;这里主要用两个例子来说明在WPF中如何使用拖拽进行操作&#xff0c;元素拖拽是一个常见的操作&#xff0c;第一个拖拽的例子是将ListBox中的子元素…

linux重启mysqlsystemctl_解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错...

重新安装mysql时&#xff0c;运行systemctl status mysqld.service报错。[roottest-dcruxue ~]# systemctl start mysqld.serviceJob for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and &q…