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,一经查实,立即删除!

相关文章

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

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

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

绝对值(习题课)导学案(教师版)【教学目标】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提高工作效率…

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

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

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

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

WPF中元素拖拽的两个实例

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

使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

中断了将近半年后发表了一篇新文章。 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程。 我们将涵盖以下主题: 使用Maven创建一个空的vert.x项目 导入IntelliJ并创建一个简单的HTTP服务…

搭建react native所遇到的坑

一、所遇问题 在搭建react native环境中,遇到执行react native run-android命令出现如下问题 1 Could not resolve all dependencies for configuration :classpath. 2 > Could not resolve com.github.dcendents:android-maven-gradle-plugin:3.1.4 3 Required b…

sqlalchemy mysql_使用SQLAlchemy操作MySQL

SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。本文将介绍如…

使用phpstorm+wamp实现php代码实时调试审计

转载自:https://www.bugbank.cn/q/article/5853afaffc0bf4f010ee6ac3.html php调试有N多好用的工具,最近研究到phpstorm配合wamp实现php实时断点调试相当不错,推荐给大家,网上有各种配置版本,但没有一个能好使的。本文…

如何使用Play框架为https配置SSL证书

我花了数小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException:对等方未通过身份…

js页面加载前执行_做一名合格的前端开发工程师:Javascript加载执行问题探索

做前端开发少不了各种利器。比如我习惯用的还是Google浏览器和重型武器Fiddller。一:原始情况 首先大家看看如下的代码:估计90%的程序员都会把js文件放在head中,但是大家有没有深究过呢?很多浏览器都会使用单一的线程来做“界面UI…

【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)

title: 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension) categories: MathematicLinear Algebra keywords:IndependenceBasisDimensionSpan toc: true date: 2017-09-25 15:20:46Abstract: 本文是本章最重要的知识点,也是整个线性代…