排查Java服务CPU使用率高达100%的原因

news2024/11/20 0:28:42

排查Java服务CPU使用率高达100%的原因

Java服务在服务器运行一段时间,有一天CPU使用率突然高达100%,通过jstack工具分别在CPU使用率为100%时执行了一次堆线程dump和cpu使用率降下来后执行了一次堆线程dump

目录

  • 排查Java服务CPU使用率高达100%的原因
  • 一、环境信息
  • 二、采集到的jstack堆内存信息
    • 1、第一次Dump的堆内存信息
    • 2、第二次Dump的堆内存信息
  • 三、故障分析
    • 1、故障原因分析
    • 2、原理分析

一、环境信息

NO名称信息
1操作系统Linux_64bit
2CPU-
3内存32G
4Java应用服务-Xmx3072m -Xmx3072m

二、采集到的jstack堆内存信息

1、第一次Dump的堆内存信息

Heap
 PSYoungGen      total 801920K, used 278058K [0x00000007c0000000, 0x0000000800000000, 0x0000000800000000)
  eden space 715008K, 26% used [0x00000007c0000000,0x00000007cbaaa868,0x00000007eba40000)
  from space 86912K, 100% used [0x00000007fab20000,0x0000000800000000,0x0000000800000000)
  to   space 166784K, 0% used [0x00000007eba40000,0x00000007eba40000,0x00000007f5d20000)
 ParOldGen       total 2097152K, used 1904581K [0x0000000740000000, 0x00000007c0000000, 0x00000007c0000000)
  object space 2097152K, 90% used [0x0000000740000000,0x00000007b43f1550,0x00000007c0000000)
 PSPermGen       total 85120K, used 84495K [0x0000000730000000, 0x0000000735320000, 0x0000000740000000)
  object space 85120K, 99% used [0x0000000730000000,0x0000000735283f18,0x0000000735320000)

2、第二次Dump的堆内存信息

Heap
 PSYoungGen      total 876864K, used 468625K [0x00000007c0000000, 0x0000000800000000, 0x0000000800000000)
  eden space 707456K, 53% used [0x00000007c0000000,0x00000007d725c7d8,0x00000007eb2e0000)
  from space 169408K, 52% used [0x00000007f5a90000,0x00000007fb1d8000,0x0000000800000000)
  to   space 170560K, 0% used [0x00000007eb2e0000,0x00000007eb2e0000,0x00000007f5970000)
 ParOldGen       total 2097152K, used 1067610K [0x0000000740000000, 0x00000007c0000000, 0x00000007c0000000)
  object space 2097152K, 50% used [0x0000000740000000,0x0000000781296a80,0x00000007c0000000)
 PSPermGen       total 85056K, used 84406K [0x0000000730000000, 0x0000000735310000, 0x0000000740000000)
  object space 85056K, 99% used [0x0000000730000000,0x000000073526d998,0x0000000735310000)

三、故障分析

1、故障原因分析

  • 通过两次Dump堆内存的比对,第一次Dump操作JVM堆内存中的老年代内存使用率高达90%(ParOldGen total 2097152K, used 1904581K [xxx] object space 2097152K, 90% used),第二次dump后显示JVM堆内存中的老年代内存使用率降到了50%(ParOldGen total 2097152K, used 1067610K [xxx] object space 2097152K, 50% used)。

  • 导致此次故障的原因是老年代内存不断上涨,直到90%后触发了完全GC,使CPU使用率高达100%;当第二次Dump出堆线程信息显示,老年代的内存被完全GC回收了部分内存,使用率由回收前的90%降到了50%;

2、原理分析

下图为JVM内存结构模型(注意图中每个内存区域占用的比例y/x,y表示当前区域的分子,x表示堆内存分母)
在这里插入图片描述
根据内存模型,EIMServer的堆内存分配情况如下:

NO内存区内存大小
1堆内存3072MB
2Yong区(新生代)1024MB
3Eden区819.2MB
4Survivor区204.8MB
5Old区(老年代)2048MB

JVM堆内存中创建一个对象是会先在Eden区申请并分配内存,如果新生代内存不足时会触发一次普通GC(内存回收),普通GC只释放Yong区的内存,通过扫描Eden区的对象,如果对象还有被引用,就将对象移入S0或S1区,如果Eden中的对象较大就会直接被移入老年代,然后将Eden区中所有不在被引用的对象全部释放;老年代内存区使用率达到90%时就会触发完全GC,完全GC时才会释放老年代内存区的内存,由于扫描的对象都是大对象,且引用数较大,所以会消耗大量的CPU资源,还会造成JVM短暂的无响应;

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

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

相关文章

【SQL】一文详解嵌入式SQL(建议收藏)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

SQLMap 扫描利用SQL注入

一、SQLMap介绍 SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Fir…

光伏行业管理亟待变革,数商云供应链系统订单流程自动化流转助力企业降本增效

作为实现“3060”双碳目标的主力军,光伏产业正迎来空前的政策、市场、资本三重加持的红利期。有业内人士预测,到2025年全球新增光伏装机量将达到270-330GW,国内新增光伏装机量将达到90-110GW,十四五期间年均新增光伏装机量将达到7…

用React做一个音乐播放器

介绍 任何正在学习 React 并想使用 React 构建项目的人。有各种博客和文章可以为开发人员指导此类项目。我确实浏览过这些文章,但其中总是缺少一种项目。缺少的项目是音乐播放器和视频播放器。这两个项目都会让您有机会处理音频和视频。您将学到很多东西&#xff0…

Linux学习-97-vmware网络桥接模式配置和vmware快照操作

19.3 vmware网络桥接模式配置 桥接:需要保证Linux虚拟机和本机处在同一个网段! #win平台输入ipconfig查看主机的ip地址Linux也必须要配置到对应的网段 桥接模式:主机ip 和虚拟机ip映射到同一块物理网卡(光纤,无线…

达梦数据库-centos7安装

参考官方文档 1.环境 操作系统CPU数据库CentOS7x86_64dm8_20221121_x86_rh6_64.iso 2.安装前准备 2.1 关闭防火墙 或 开放5236端口 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 开放5236端口(推荐使用) firewall-cmd --pe…

TYPE A USB2.0电路设计

TYPE A USB2.0连接器可以分为公座和母座,放在供电端PCB板上的一般是母座, 2.0的母座有四个信号引脚。今天就来和大家分享下TYPE A USB2.0的板级电路设计, 首先来看到 TYPE A USB2.0四个引脚的信号定义,1脚是VBUS,需要…

Kafka系列之入门(荣耀典藏版)

目录 一、为什么要用消息中间件? 1、异步处理 2、应用解耦 3、流量削峰 4、日志处理 二、为什么选择Kafka? 消息中间件的编年史 1、Kafka的外在表现和内在设计 2、市场主流消息中间件对比 三、Kafka中的基本概念 1、消息和批次 2、主题和分区…

【笔记:模拟CMOS集成电路】两级运算放大器设计与仿真(带版图)

【笔记:模拟CMOS集成电路】两级运算放大器设计与仿真(带版图)前言1.电路分析1.1电路结构电路描述:1.2小信号分析1.3公式2指标设计2.1预期设计指标参数2.2参数分析(1)确定gm1、gm6(2)分配电流(3)确定M1尺寸(4)确定M6尺寸(5)共模输入…

学习.NET MAUI Blazor(二)、MAUI是个啥

随着.NET 7的发布,MAUI也正式发布了。那么MAUI是个啥?我们先来看看官方解释: .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 目录关于MAUIMAUI的工作原理如何开发MAUI该如何选择…

5万字企业数字化运营管理平台软件开发框架项目技术方案

目录 1 项目总体概述 项目总体技术方案保障 系统设计 系统体系结构设计 系统指标保障 系统质量 系统健壮性 系统应具备安全性 系统易用性 系统可维护性 系统完备性 系统可扩展性 系统可测试性 系统可移植性 系统可追踪性 系统易安装性 2 项目技术方案 2.1 系统…

没有的博客1

我虽不善言辞 但关于爱你 我无法掩饰 关于我爱你音频:00:0004:55 | 01 | 愿你们是渣的那一方 背负所有骂名愉快生活 而不是在深夜痛哭 辗转反侧茶饭不思 做一个痛苦的好人 | 02 | 昨晚喜欢的男孩子发了新女友的照片 很难过 做个大人真好啊 十分钟就能让自…

Linux上RabbitMQ安装使用

文章目录安装安装erlang安装rabbitMQ管理指令安装 官网 由于需要对应erlang和rabbitMQ两者版本的关系,先确定好下载哪个版本,版本关系表,以下教程以Erlang 23.3.4.11和RabbitMQ 3.9.14为例 安装erlang 略,进入对应版本下载安装…

【YApi接口管理平台】在Linux上使用Docker搭建YApi (亲测完美运行)

本期目录前言1. 创建MongoDB容器数据卷2. 安装Node.js3. 拉取MongoDB镜像4. 启动Mongo容器5. 拉取YApi镜像6. 初始化YApi7. 运行YApi容器8. 访问前言 博主想在自己的 Linux 虚拟机上使用 Docker 搭建 API 接口管理平台来团队开发一个项目,跟着网上的教程硬是装了好…

Unreal Engine的编译类型和命名规则

目录 编译类型 命名规则 资源命名规则 文件夹命名规则 编译类型 debug game只能调试你的项目,不能调试编辑器项目 多加了一个editor,就可以调试编辑器了。 不同的编译类型可以理解为引擎在不同的类型下的监管程度,用以不同的场景 Te…

树莓派驱动水星无线网卡(MW150UH)教程指南

目录 1.树莓派版本 2.无线网卡 查询无线网卡 1.如果为 Bus 001 Device 005: ID 0bda:b711 Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (After Modeswitch) 2.如果为 Bus 001 Device 007: ID 148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapte…

深度学习计算广告(更新中)

本文转自王喆的《深度学习计算广告》,仅用于学习。 文章目录一、计算广告系统简介二、经典的广告系统架构三、dl时代广告系统各模块技术演进1. Ad Ranking - 从大刀阔斧的革命到精雕细琢的改进(1)模型发展图(2)张俊林&…

STL之list模拟实现

list常识 list迭代器不支持【】&#xff0c;所以不支持随机访问。也不支持>、<&#xff0c;没有意义&#xff0c;因为iterator是地址&#xff0c;地址并不连续。 重要的说三遍&#xff1a; list不支持随机访问&#xff0c;因为没有重写[]。 list不支持随机访问。 list不…

vue3+ts项目 笔记总结

一、首先得先建好vue3ts的项目&#xff1a; 在终端新建项目输入&#xff1a;vue create vue3-ts接下来的每一步如图所示&#xff1a;注意要通过空格选中TypeScript二、项目建好后&#xff0c;开始正常的开发&#xff0c;注意区分vue2与vue3的区别&#xff1a; 在vue3项目中不…

移动设备软件开发-Spape详解

Spape详解 1.自定义背景shape 1.1gradient 1.简介 定义渐变色&#xff0c;可以定义两色渐变和三色渐变&#xff0c;及渐变样式&#xff0c;它的属性有下面几个2.属性 angle&#xff0c;只对线性渐变是有效的放射性渐变必须指定放射性的半径&#xff0c;gradientRadiouscentetX和…