java程序内存占用过高问题排查

内存飙高问题如何排查? 内存飙高如果发生在java进程上,一般情况是因为创建了大量对象导致,持续飙高说明垃圾回收跟不上对象创建的速度,或者内存泄漏导致对象无法被回收!排查中涉及到如下命令:jstat -gc pid 1000 查看gc情况,时间等信息,每隔一秒打印一次jmap -histo pid | head -20 查看堆内存占用空间最大的钱20个对象类型jmap -dump:live,format=b,file=/home/chenjian/myheapdump.hprof pid 导出堆内存快照。 阅读详情

一、现象

收到线上机器报警(内存使用过高),对报警的机器节点重启后恢复正常,搁天后新的节点又开始报警;

二、排查

直接对线上机器执行dump命令,由于线上机器还有流量在持续请求,因此dump时间比较长,生成的dump文件有16G+;因此我们先摘除了问题节点的流量,执行dump命令:

ps -ef|grep java 获取服务的pid

jmap -dump:live,format=b,file=/opt/mydump.hprof 3915 (只dump存活的日志)

生成的dump文件13G左右,压缩后还有3G,把mydump.hprof文件下载到本地

三、分析

用jprofiler工具进行分析,下面是分析步骤:

1.打开要分析的快照文件

 

 

2.点击最大对象

 选择占用内存最大的对象,点击使用选定对象

选择传出引用,outgoing references 点击确认

 

 

3.点击reference引用查看

点击reference会显示刚才选定的最大对象的引用

 展开查看详细信息,可以看到是由于线程池使用了无界队列(默认int的最大值)导致,队列中的任务有223589个,内存总占用7900MB

 点击传入引用Incoming references,展开详细信息,展示更多,可以看到具体引用的类,InterflowProxy就是代码中用到线程池的类

 至此,可以定位到具体占用内存过高的代码。

linux排查CPU或内存占用高问题(JAVA程序导致linux服务器CPU过高和内存过高) 最近生产环境经常发生CPU和内存异过高的情况,以前一般排查的也是一些死锁问题,排查死锁的时候直接打印程序的堆栈信息,然后查看线程的各种状态,差不多都能猜到问题所在,这两天cpu和内存问题刚开始也是直接打印堆栈信息,然后发现堆栈信息太多,很难定位到是什么导致了cpu和内存问题,虽然在堆栈文件里面找到很多自己写的业务代码,但是因为执行的线程比较多,查询起来比较费劲(基本上来说除非交易量很大,应用支持... 阅读详情

相关推荐

Java进程内存占用过高,排查解决方法

Java进程内存占用过高是一个常见的问题,但通过检查内存泄漏、优化对象的创建和销毁以及调整JVM内存参数,我们可以有效地解决这个问题。本文将介绍一些常见的排查和解决方法,帮助您解决Java进程内存占用过高的问题。Java应用程序运行在Java虚拟机(JVM)中,可以通过调整JVM的内存参数来限制Java进程的内存占用。通过优化对象的创建和销毁,可以有效减少内存占用,提升Java应用程序的性能和稳定性。a. 使用对象池:通过对象池可以重用已经创建的对象,减少对象的创建和销毁次数。优化对象的创建和销毁。

CyberWizarDD的博客 8259

排查解决Java进程占用内存过高

使用内存分析工具,如Eclipse Memory Analyzer (MAT) 或 VisualVM 等,来检测内存泄漏和内存占用高的原因。这些工具可以提供内存使用情况的详细信息,并帮助你找出内存泄漏的原因。检查应用程序的代码逻辑,特别是是否有内存泄漏问题。内存泄漏是指当应用程序不再需要内存时,无法正确释放它,导致内存占用不断增加。检查应用程序中的线程,特别是长时间运行的线程。如果线程没有正确终止,可能会导致内存泄漏或内存占用过高。考虑将应用程序的设计修改为更加内存友好的方式,例如使用缓存或对象池等技术。

风信子 7340

cJSON库用完后内存泄漏?手把手教你正确使用cJSON_Delete和free释放资源

本文深入解析cJSON库的内存管理机制,重点解决使用后的内存泄漏问题。通过详细讲解cJSON_Delete和free的正确使用方法,帮助开发者在处理JSON数据时有效释放资源,避免内存泄漏。特别适用于嵌入式系统和资源受限环境,提升开发效率和系统稳定性。

weixin_30808693的博客 418

Java进程占用内存过高,排查解决方法

最近收到邮件报警,说内存使作率达到84%。如下图: 解决方法: A:可能是代码原因导致的问题: 1、使用命令:top查看当前进程的状态 2、从上图可以看到PID:916的java进程占用内存较大。定位线程问题(通过命令查看PID 为25894 进程的线程情况),命令:# ps p 916 -L -o pcpu,pmem,pid,tid,time,tname,cmd ...

weixin_30323961的博客 5万+

CAD的.dwg文件导入 ArcGIS:高程分析、坡度分析、坡向分析

CAD的.dwg文件导入 ArcGIS,再进行高程分析、坡度分析、坡向分析。

My_Echo_yM的博客 7235

2022-8-3----Android10.0(MTK)-----SN_Writer 写入 SN 注意事项

SN_Writer、写入SN

qq_854189624的博客 1万+

线上java程序CPU及内存占用过高问题排查总结

由此可以看出,消耗资源的线程id为4152.由此,可见,该进程id为4140。

JustCode的博客 2379

SBM与超效率SBM模型实战:从原始面板数据到MATLAB高效实现

本文详细介绍了SBM模型与超效率SBM模型的核心原理,并提供了从原始面板数据预处理到MATLAB高效实现的完整实战指南。通过具体代码解析,帮助研究者掌握如何利用MATLAB进行数据标准化、模型构建、效率求解及结果可视化,从而精准评估决策单元的相对效率,尤其适用于在高效单元中进一步精细排名的场景。

weixin_29100399的博客 478

linux运行java程序内存过大_排查java应用linux环境内存占用过高的问题

一、问题场景在一个短信平台的项目中,设置了一个下发节点的Xmx为16G,但是出现了内存撑满,导致CPU过高的情况。当时的具体情况是,该应用内存占用16G,该应用CPU占用1400%(16核),服务器负载15左右。进入应用的实时日志,发现日志每打印四五秒后,会暂停一分多钟。这代表着由于内存耗尽,导致cpu高负载,最终导致应用程序不能正常运行,断断续续。严重影响生产环境的运行速率。二、解决方案1、线上...

weixin_42395823的博客 5418

EtherCAT丢包问题深度解析:从原理到实战排查指南

在工业自动化与运动控制领域,实时通讯网络的稳定性是系统可靠运行的基石。EtherCAT(以太网控制自动化技术)作为一种高性能工业以太网协议,其核心在于独特的“飞读飞写”机制和纳秒级的分布时钟同步,以实现多设备间的精准协同。然而,物理链路干扰、配置不当或硬件性能瓶颈都可能导致数据帧丢失,破坏时钟同步,进而引发伺服抖动、定位精度下降乃至生产线停机。本文聚焦于EtherCAT丢包这一典型故障,结合SSC(Slave Stack Code Tool)从站协议栈开发与实时系统调优等工程实践,系统阐述其成因、影响及一套

weixin_32050773的博客 341

VS Code 重大更新:Agent Skills完美支持!

代码不会骗人,但你的 LLM 可能会编个故事——除非你给它一本《技能手册》。——某位深夜调试成功的 Go 工程师。

weixin_44058951的博客 3459

java程序内存占用过高问题排查(一)

在线上出现内存占用过大,无法被GC回收,服务出现内存溢出等情况时我们需要对当前服务程序进行解刨(大概可以这么理解哈哈),看透这些内存中都是些什么东西。 一、生成 内存快照 dump文件 找到你需要生成快照的java程序PID,这里我以 6396 为例 jmap -dump:format=b,file=user.dump 6396 执行后会在当前cmd的运行目录中生成一个 user.dump的文件 二、分析 dump 文件 使用 JProfiler 打开这个文件,打开前需要将生成

淡忘烟雨的博客 1676

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 324

Java吃CPU还是内存_Java中的CPU占用高和内存占用高的问题排查

下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程。如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下。1、Java CPU过高的问题排查举个例子,如下:packagecom.classloading;publicclassTest{staticclassMyThreadextendsThread{publicvoidrun() {// 死循环,...

weixin_32022143的博客 1561

小麦病害检测系统开发

本项目旨在针对小麦病害小目标检测任务,在YOLOv11基础上进行三项改进: - 将主干网络替换为Swin Transformer,增强全局特征提取能力。 - 在检测头中引入DynamicHead,并增加检测头数量至四个,提升多尺度检测性能。 - 集成半监督FixMatch训练框架,利用无标签数据提升模型泛化能力。 我们定义五个模型进行对比实验: - Model 0: 原始YOLOv11 (有监督) - Model 1: YOLOv11 + Swin Transformer (有监督) ~~~~~~

AI的内部世界的博客 121

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)

高cpu占用1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。ps -mp pid -o THREAD,tid,timeprintf "%x\n" tid3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运...

weixin_42299778的博客 729

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java排查哪个方法占用cpu_Java中的CPU占用高和内存占用高的问题排查

下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程。如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下。1、Java CPU过高的问题排查举个例子,如下:packagecom.classloading;publicclassTest{staticclassMyThreadextendsThread{publicvoidrun...

weixin_34138397的博客 413

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java cpu高_Java中的CPU占用高和内存占用高的问题排查

下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程。如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下。1、Java CPU过高的问题排查举个例子,如下:packagecom.classloading;publicclassTest{staticclassMyThreadextendsThread{publicvoidrun...

weixin_35330796的博客 115

Java:内存过高和CPU过高的排查流程

3、假设占用率最高的线程 ID 为 6900,将其转换为 16 进制形式 (因为 java native 线程以16进制形式输出)。4、利用 jstack 打印出 java 线程调用栈信息,这样就可以更好定位问题。1、利用 top 命令可以查出占 CPU 最高的的进程pid。2、查看该进程下占用最高的线程id。4、查看占用内存比较多的存活对象。2、查看JVM堆内存分配情况。3、查看占用内存比较多的对象。

王小二(海阔天空) 1510

Java中的CPU占用高和内存占用高的问题排查

下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程。如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下。1、Java CPU过高的问题排...

JAVA高级架构 730

排查cpu占用率高及堆内存溢出

java程序启动时,添加命令-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ 堆内存溢出时会生成dump日志。2.查看哪个线程占用cpu最高 ps -mp 2308 -o THREAD,tid,time(如线程TID占用cpu占用最高:2320)3.把TID2320转为16进制,printf "%x\n" 2320 (返回910)1.输入top命令查看cpu占用最高的进程(如pid:2308)利用MAT对dump文件进行分析。

weixin_39794723的博客 458

JVM内存、CPU占用过高问题定位

JVM内存、CPU占用过高问题排查

weixin_44102162的博客 4805

JAVA服务线上排查问题流程

jvm

chenjf0221的博客 419

Java CPU飙升 排查

Java CPU飙升 排查

醉逸鎏年的博客 1330
上一篇: java服务线上故障如何快速排查?
下一篇: dubbo原理介绍
JavaBlackHole
博客等级 码龄9年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值