Java记录一次生产CPU飙升查找原因

news2024/12/24 21:45:07

java项目:项目定制化产品的微服务,主要做查es的定时任务和报表统计,实时监控数据.

上线几天,cpu报警
看图:

 

排查思路:

七八个定时任务同时查es,可能造成的飙升,然后只能拿jstack分析,生产环境慎用.
jstack是Java开发工具包中的一个命令行工具,用于生成Java虚拟机(JVM)的线程堆栈跟踪信息。jstack记录的线程堆栈跟踪信息对于分析和调试Java应用程序非常有用。
 

jstack记录的作用:

  1. 线程状态分析:jstack可以提供每个线程的状态信息,包括线程的运行状态(如运行中、等待、阻塞等)和优先级。这对于识别和解决应用程序中的线程问题非常有帮助。
  2. 死锁检测:jstack可以检测并显示应用程序中的死锁情况。通过分析线程堆栈跟踪信息,可以确定哪些线程持有了哪些锁,并且哪些线程正在等待锁。这有助于识别潜在的死锁问题,并采取相应的措施进行解决。
  3. 性能分析:jstack可以提供应用程序中各个线程的执行情况。通过分析线程堆栈跟踪信息,可以确定哪些线程正在执行哪些代码,并了解每个线程的执行时间。这有助于识别性能瓶颈和优化代码。
  4. 内存泄漏分析:jstack可以显示线程堆栈跟踪信息中的对象引用关系。通过分析线程堆栈跟踪信息,可以确定哪些对象正在被哪些线程引用,从而帮助识别潜在的内存泄漏问题。 总之,jstack记录的线程堆栈跟踪信息对于分析和调试Java应用程序非常有用。它可以帮助开发人员识别线程问题、死锁、性能问题和内存泄漏等,并提供有价值的信息用于问题的定位和解决。
jstack 1 > test.txt  
 1为 PID  test.txt 生成记载的文件

怎么分析java的stack文件?

1.使用jstack命令生成stack文件:在命令行中运行jstack <pid> > stack.txt,其中<pid>是Java应用程序的进程ID。这将会生成一个名为stack.txt的文件,其中包含了Java应用程序的线程堆栈信息。

2.打开stack文件:使用文本编辑器(如Notepad++、Sublime Text等)打开生成的stack文件。

3.分析线程堆栈信息:在stack文件中,每个线程的堆栈信息以"Thread"开头。每个线程的堆栈信息可以帮助我们了解线程的执行状态、调用的方法以及方法调用的深度。

4.查找CPU占用高的线程:根据线程堆栈信息,可以查找CPU占用高的线程。通常情况下,CPU占用高的线程会在堆栈信息中有大量的方法调用或者处于某个方法调用中。

5.分析线程堆栈信息:分析CPU占用高的线程的堆栈信息,可以确定导致CPU暴增的具体代码位置。检查是否存在无限循环、过度递归、频繁的IO操作、大量的计算等问题。

6.进行代码优化:根据分析结果,进行相应的代码优化。可以使用合适的算法、减少不必要的计算、优化IO操作等,以降低CPU的使用率。

7.进行性能测试:在进行代码优化后,可以进行性能测试,验证优化效果。通过监控CPU使用情况,确认是否成功降低了CPU的占用率。
需要注意的是,stack文件只是一个快照,记录了线程的堆栈信息。如果你想要监控应用程序的CPU使用情况,可以考虑使用性能分析工具(如Java VisualVM、JProfiler、YourKit等),这些工具可以提供更详细的CPU使用情况、方法调用树等信息,帮助你更好地分析和解决CPU暴增问题。

问题原因:

 查到原因 ,看了代码 Socket没关闭;
最后:生产上jmap也慎用 
 

哪些对象占用内存 前20
jmap -histo 27863 | head -20

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

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

相关文章

软件测试环境讲解

在一个项目开发到发布的整个过程中&#xff0c;会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上&#xff0c;配置好以后&#xff0c;跑起来项目&#xff0c…

高速公路巡检无人机,为何成为公路巡检的主流工具

随着无人机技术的不断发展&#xff0c;无人机越来越多地应用于各个领域。其中&#xff0c;在高速公路领域&#xff0c;高速公路巡检无人机已成为公路巡检的得力助手。高速公路巡检无人机之所以能够成为公路巡检中的主流工具&#xff0c;主要是因为其具备以下三大特性。 一、高速…

stack模拟实现-适配器

在C中&#xff0c;适配器模式常用于对容器类或者容器类的操作进行封装和拓展。std::stack就是一种适配器。它将一个底层容器&#xff08;默认为std::deque&#xff09;的接口转换成了一种先入后出&#xff08;Last-In-First-Out&#xff0c;LIFO&#xff09;的栈的接口。 适配…

SAS-数据集SQL垂直(纵向)合并

一、SQL垂直合并的基本语法 一个selectt对应一个表&#xff0c;select之间用set-operator连接&#xff0c;set-operator包括&#xff1a;except&#xff08;期望&#xff09;、intersect&#xff08;相交&#xff09;、union&#xff08;合并&#xff09;&#xff0c;outer un…

规划路线(微信小程序、H5)

//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…

2023-08-03 LeetCode每日一题(删除注释)

2023-08-03每日一题 一、题目编号 722. 删除注释二、题目链接 点击跳转到题目位置 三、题目描述 给一个 C 程序&#xff0c;删除程序中的注释。这个程序source是一个数组&#xff0c;其中source[i]表示第 i 行源码。 这表示每行源码由 ‘\n’ 分隔。 在 C 中有两种注释风…

pytorch实战-图像分类(一)(数据预处理)

目录 1.导入各种库 2.数据预处理 2.1数据读取 2.2图像增强 3.构建数据网络 3.1网络构建 3.2读取标签对应的名字 4.展示数据 4.1数据转换 4.2画图 5.模型训练 1.导入各种库 上代码&#xff1a; import os import matplotlib.pyplot as plt %matplotlib inline import nu…

Pytorch深度强化学习1-4:策略改进定理与贝尔曼最优方程详细推导

目录 0 专栏介绍1 贝尔曼最优方程2 贪心策略与策略改进3 策略迭代与价值迭代4 算法流程 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理&#xff0c;并且采用Pytorch框架对常见的强化学习算法、案例进行实现&#xff0c;帮助读者理解并快速上手开发。同时&#xff0c;辅以各…

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符&#xff0c;不能直接使用&#xff0c;需要使用转义符\。如&#xff1a;$,(,),*,,.,?,[,,^,{。 这里大家会有疑问&#xff1a;为啥小括号(),这个就需要两个来转义&a…

C++ 对象数组

**数组元素不仅可以是基本数据类型&#xff0c;也可以是自定义类型。**例如&#xff0c;要存储和处理某单位全体雇员的信息&#xff0c;就可以建立一个雇员类的对象数组。对象数组的元素是对象&#xff0c;不仅具有数据成员&#xff0c;而且还有函数成员。 因此&#xff0c;和基…

iframe跨域解决方案

在 Web 开发中&#xff0c;跨域是指在一个域&#xff08;例如&#xff0c;https://www.example.com&#xff09;的页面中请求了另一个域&#xff08;例如&#xff0c;https://api.example.com&#xff09;的资源&#xff0c;浏览器出于安全考虑会阻止这样的请求。为了解决 ifra…

C#实现旋转图片验证码

开发环境&#xff1a;C#&#xff0c;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core 1、建立一个验证码控制器 新建两个方法Create和Check&#xff0c;Create用于创建验证码&#xff08;返回1张图片和令牌&#xff09;&#xff0c;Check用于验证&#xff08;验证图…

Json文件编辑功能

1 Json格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript&#xff08;European Computer Manufacturers Association, 欧洲计算机协会制定的js规范&#xff09;的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。…

Curve深陷安全事件,OKLink如何破局

出品&#xff5c;欧科云链研究院 作者&#xff5c;Matthew Lee 7月31号&#xff0c;Curve 在平台表示 Vyper 0.2.15 的稳定币池由于编译器的漏洞所以遭到攻击。具体因为重入锁功能的失效&#xff0c;所以黑客可以轻易发动重入攻击&#xff0c;即允许攻击者在单次交易中执行某…

【运维】在阿里云上搭建自己的图床,配合PicGo和Typora使用

本文将详细介绍如何在阿里云上搭建自己的图床&#xff0c;包括购买OSS服务、配置域名解析、创建OSS存储桶和设置图片上传规则等步骤。希望对您有所帮助&#xff01; 一、购买OSS服务 首先&#xff0c;我们需要在阿里云官网购买OSS(Object Storage Service)服务。OSS是阿里云提…

【Linux命令200例】cp用于复制文件和目录(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…

《golang设计模式》第一部分·创建型模式-05-工厂方法模式(Factory Method)

文章目录 1 概述2.1 角色2.2 类图 2 代码示例2. 1 设计2.2 代码2.3 类图 3. 简单工厂3.1 角色3.2 类图3.3 代码示例3.3.1 设计3.3.2 代码3.3.3 类图 1 概述 工厂方法类定义产品对象创建接口&#xff0c;但由子类实现具体产品对象的创建。 2.1 角色 Product&#xff08;抽象产…

opencv-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

闭运算是先膨胀、后腐蚀的运算&#xff0c;它有助于关闭前景物体内部的小孔&#xff0c;或去除物体上的小黑点&#xff0c;还可以将不同的前景图像进行连接。 例如&#xff0c;在图 8-17 中&#xff0c;通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔&#xff08;内部闭合的…

MacBook截取网页长图

第一步&#xff1a;⌘Command Option I 第二步&#xff1a;⌘Command Shift P 第三步&#xff1a; 红框内输入Capture full size screenshot&#xff0c;回车&#xff0c;长图会自动下载。

软考高项(六)项目管理概述 ★重点集萃★

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…