JVM内存泄露排查

Win上通过Jconsole查看Java程序资源占用情况(教程总结,一篇就够了) JConsole 是一个内置 Java 性能分析器,Java 5开始 引入了 JConsole。可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole来监控 Java 应用程序性能和跟踪 Java 中的代码。Jconsole工具查看程序的资源占用请求。安装jdk时bin目录有jconsole.exe工具,或者通过 Win + R,输入jconsole.exe启动jconsole( 可以从命令行直接输入jconsole。 阅读详情

一:tomcat配置jconsole远程连接

1. jdk配置jmxremote.password

cp jmxremote.password.template jmxremote.password

2.jmxremote.password最后增加下列内容

monitorRole  QED

controlRole   password1111


3.tomcat服务bin/catalina.sh文件增加下列内容

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=10.10.77.145 -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/home/jdk1.7.0_71/jre/lib/management/jmxremote.password"


10.10.77.145:当前tomcat服务机器的IP地址

12345:jconsole远程服务开放的端口

重启tomcat服务

二:jconsole工具远程连接

打开本地windows机器jdk安装目录bin/jconsole.exe工具



连接成功后出现下列图表



打开内存图表,我这里配置了CMS(concurrentMarkSweep)垃圾回收机制,所以显示的是CMS Old Gen,如果没配置CMS,应该是perm Old Gen(老年代区)。

当验证程序是否有内存泄露时,可以高并发的发送请求让服务程序一直在处理请求,可以看见下列的线条一直处于上升状态,当过一会儿后(时间可以长一点),点击执行GC,当内存使用率没有下降,则大致表明有内存泄露。这里可以让程序多调试几次,确定是否是由于内存泄露导致的。 如果程序无内存泄露,则正确的线条状态应如下所示。


三:jmap命令导出堆内存使用情况

jmap -heap pid       查看jvm堆内存使用情况

pid表示tomcat服务进程号,我配置了CMS垃圾回收机制,如果不配置,应该是 perm old generation,表示老年代堆区(jvm老年代区自行百度),如果是内存泄露,这里的内存会一直上升,直到100,就算调用gc,内存使用率也不会下降。



jmap -dump:format=b,file=./heap.bin pid  导出堆使用详情文件

pid表示tomcat服务进程号,为了更能排查那里出现了内存泄露,等到老年代内存使用率达到90%以上最佳,等一会就导出完成


四:MAT图形化查看堆内存使用情况

下载MemoryAnalyzer工具 http://www.eclipse.org/mat/downloads.php 点击打开链接

解压文件,打开mat目录下文件MemoryAnalyzer.exe工具


导入刚才堆内存文件heap.bin



打开详情,从上图可知类DubboFilterUtil有问题,从下图可知对象RequestInfo占用了太多的内存,剩下的就只需要定位到代码排查原因即可



JVM常见线上问题 → CPU 100%、内存泄露 问题排查 前言 后文会从 Windows、Linux 两个系统来做示例展示,有人会有疑问了:为什么要说Windows版的 ? 目前市面上还是有很多 Windows 服务器的,应用于传统行业、政府结构、医疗行业 等等;两个系统下的情况都演示下,有备无患 后文中用到了两个工具:Processor Explorer、MAT,它们是什么,有什么用,怎么用,本文不做介绍 cpu 100% 下面的示例中, cpu 的占有率没到 100%,只是比较高,但是排查方式是一样的,希望大家不要钻牛角尖 Windows 1、.. 阅读详情

相关推荐

记录一次jvm内存泄露的排查过程

  前些天,运维告诉我刚上线的java服务占用CPU过高。 以下是发现解决问题的具体流程。   1:通过#top命令查看,我的java服务确实把CPU几乎占满了,如图      可看到18400这个进程CPU占用达到了1200%,这确实不太正常,那么我们接下来分析到底哪些线程占用了CPU   2:通过#top -Hp 18400这条命令我们可以看到这个进程中线程的情况,部分截图如下。   通过截图可以看到,前面的线程占用的CPU是比较高的,那我们就具体分析这些...

qq_33544052的博客 541

内存泄漏问题排查

文章目录 1、获取内存泄漏程序的进程号 ps -ef|grep java 2、查看该进程下内存对象类全名中包含bshms的对象个数 ./jmap -histo 19655 |grep bshms 3、打开java控制台(命令jconsole),连接到该进程,切到“内存”tab页,点击右上角的“执行GC”按钮进行垃圾回收 4、重复步骤2,看下对象个数,一直增加不减少,和程序内部逻辑不一样的,就是内存泄漏的。 结合sort命令,来查看:一个JVM中什么类的实例最多?一个JVM中什么类的占用的合计容量

斌哥谈编程 1477

通过jconsole分析内存泄漏

初体验(mac为例) 终端输入:jconsole 选择需要监控的程序,可以远程,可以本地,这里我们监控本地的为例: 1:使用SSH工具,CD命令到JDK_HOME/BIN路径下。 cd /app/jdk1.6.0_45/bin ./jconsole 打开jconsole窗口 2:选择应用进程点击”Connect”后 ,连接打开主窗口 3:选中面板中的”MBeans”,并点开左边栏中的依次打开c...

牧夏的个人博客 5695

yii beforeaction 如何赋值全局变量_讲讲 js 的内存泄漏、如何监控和分析

「Q:什么是内存泄漏?」字面上的意思,申请的内存没有及时回收掉,被泄漏了「Q:为什么会发生内存泄漏?」虽然前端有垃圾回收机制,但当某块无用的内存,却无法被垃圾回收机制认为是垃圾时,也就发生内存泄漏了而垃圾回收机制通常是使用标志清除策略,简单说,也就是引用从根节点开始是否可达来判定是否是垃圾上面是发生内存泄漏的根本原因,直接原因则是,当不同生命周期的两个东西相互通信时,一方生命到期该回收了...

weixin_39851977的博客 212

Java内存泄漏的检测与解决

一旦发现内存泄漏,我们应该及时释放资源、避免不必要的引用保留,并考虑使用弱引用和软引用等技术手段。通过以上方法和注意事项,我们可以有效地检测和解决Java中的内存泄漏问题,提高应用程序的性能和稳定性。对于不一定需要强引用的对象,可以考虑使用弱引用(WeakReference)或软引用(SoftReference)来引用它们。通过观察内存使用的变化和对象的创建和销毁情况,可以初步判断是否存在内存泄漏。例如,对于数据库连接、文件IO流等资源,应该在不再使用时调用相应的关闭方法。如果有任何问题,请随时提问。

CodeShiftZ的博客 1117

JVM内存模型与调优实战:从内存泄露排查到Tomcat启动参数配置

JVM内存模型定义了堆、栈、方法区等运行时数据区域,是理解Java内存管理和垃圾回收的基础。其核心原理在于通过分代回收和可达性分析实现自动内存管理,技术价值在于提升应用稳定性和性能。在线上服务GC频繁、内存泄露排查、Tomcat启动报错等场景中,合理配置JVM参数和利用jmap、jstat、jcmd等工具至关重要。本文围绕JVM内存区域、内存泄露排查、Tomcat启动JVM参数设置等实战经验,帮助开发者构建完整的排查链路。

weixin_32667955的博客 261

JVM内存泄露排查指令

JVM内存泄露排查指令 查看系统中各个进程状态 top 题外话记录下:使用特定端口查找进程的PID ss -ltnup 'sport = :22' l – show only listening sockets t – show TCP connections n – show addresses in a numerical form u – show UDP connections p –...

琅天溪的博客 483

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 315

JVM 常见线上问题 → CPU 100%、内存泄露 问题排查

文件路径: D:\20260.stack4、线程快照分析我们先浏览下快照内容内容还算比较简洁,线程快照格式都是统一的,我们以一个线程快照简单说明下我们前面找到占 cpu 最高的线程号: 15900 ,十六进制: 3e1c ,用 3e1c 去快照文件里面搜一下自此,找到问题。

2501_90251088的博客 1037

【本体】Protege高效批量导入实例(Individuals)的自动化实践

本文详细介绍了在Protege中高效批量导入实例(Individuals)的自动化实践方法。通过分析Protege本体文件结构,提供Python脚本示例,帮助用户快速处理大规模数据导入,显著提升知识图谱构建效率。特别适合需要处理数千个实例的医疗、制药等领域应用。

weixin_30275415的博客 408

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑

本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。

gg901的博客 1087

JVM常见线上问题:CPU 100%、内存泄露问题排查

jps:列出正在运行的虚拟机进程jstat:监视虚拟机各种运行状态信息,可以显示虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据jinfo:实时查看和调整虚拟机各项参数jmap:生成堆转储快照,也可以查询 finalize 执行队列、Java 堆和永久代的详细信息jstack:生成虚拟机当前时刻的线程快照jhat:虚拟机堆转储快照分析工具。

日常工作记录,解决实际问题,不成体系。 1509

ANSYS Help USER300

USER 300概述单元描述输入数据假设与限制条件 概述 单元描述 Mechanical APDL提供了一种方便的方法来创建自定义的单元,命名为USER300,可以创建几乎任何单元类型。 UserElem子程序为Mechanical APDL在单元类型创建上提供了一个接口,可传递用户自定义单元创建时所需的所有数据,然后从自定义单元返回所有数据和结果,以更新数据库和文件。因为通过接口可以访问数据库和文件信息,所以很少需要了解Mechanical APDL数据库程序和文件结构。该接口还提供了获取Mechanic

weixin_47019765的博客 2235

JVM线上CPU 100%、内存泄露问题排查

原文链接:https://www.toutiao.com/i6881508437667086856/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1620435813&app=news_article&utm_source=weixin&utm_medium=toutiao_ios&use_new_style=1&req_id=20210508090333

Dream_xun的专栏 2234

解决TextMeshPro在AB打包中的字体冗余问题:源码修改全记录

本文详细介绍了如何解决TextMeshPro在AB打包中的字体冗余问题,通过源码改造和工程实践优化Unity项目的性能。内容包括资源加载路径重构、AB打包策略优化及运行时加载方案,有效减少包体体积和构建时间,提升内存效率。

weixin_42558257的博客 185

MoveIt 运动学、运动规划、混合规划、move_group

混合规划是运动规划方法的一个术语,它将异构运动规划器结合起来,以产生更稳健或反应更快的解决方案。这种通用方法在导航领域已经非常成熟,并在导航2等流行项目中成功实施。MoveIt 的混合规划架构结合了一对全局规划器和局部规划器,它们以不同的规划速度和问题范围并行、并发运行。全局规划器的任务是解决全局运动规划问题,这与 “感知-规划-行动 ”应用中使用的规划器非常相似。所使用的规划器算法应该是完整的,因此假定其计算时间相对较慢。此外,全局规划器不要求实时安全,这意味着无法保证规划器在特定期限内找到解决方案。

机器人控制与仿真应用 2132

记一次线上JVM原生系统内存泄露排查

目录问题报告应用概况初步分析Java堆内存,MetaSpace等使用情况Java堆外内存分析进程原生内存分析(Native Memory)原生内存详细分析内存内容分析引入jemallocjava.util.zip.Inflater.inflateBytes调用栈跟踪Kylin JDBC Driver内存泄露分析结论 问题报告 一日运维报告某应用JVM进程被OOM kill [日期] 10-15-1...

以简为道 4666

piamon实战-- 如何使用 Paimon 的 Java API 实现数据的点查

点查(Point Lookup)是指通过 ​​唯一键(Primary Key)​​ 快速定位并返回单条或少量数据的查询模式。例如:根据用户 ID 查询用户信息、根据订单号查询订单详情等。点查的核心诉求是 ​​低延迟​​ 和 ​​高吞吐​​,适用于实时风控、在线分析等场景。​​定义主键表结构​​,优化数据分布。​​构建过滤条件​​,使用指定查询键。​​执行查询并处理结果​​,结合流式更新实现实时查询。

阿华田的博客 532

JVM 优化、内存泄露排查、gc.log 分析方法等(转载)

JVM 优化、内存泄露排查、gc.log 分析方法等(转载)

weixin_42107384的博客 165

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 127

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jvm 内存泄露排查(visual vm)

jvm排查内存泄露(visualvm)

weixin_43931625的博客 1143

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jvm内存泄露问题及排查

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34148340的博客 180

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jvm内存泄露和内存死锁排查

使用工具jconsole和visualvm jconsole可以查看内存状况和死锁 内存泄露代码 package com.test; import java.util.*; public class Heap{ public static void main(String[] args) throws InterruptedException{ ArrayL...

kkchff的博客 1590

【JVM】Java内存泄露的排查思路?

1、通过jmap指定打印他的内存快照dump(Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中)有的情况是内存溢出之后程序则会直接中断,而jmap只能打印在运行中的程序,所以建议通过参数的方式的生成dump文件。,但无法被垃圾回收器回收释放,从而导致可用内存逐渐减少,最终可能导致内存耗尽或性能下降的问题。Java内存泄露(Memory Leak)是指在Java程序中,无用的对象占用了。2、使用vm参数获取dump文件(可以指定生成dump文件的文件目录)

weixin_45618869的博客 1645

排查JVM内存泄露问题

摘要:JVM内存泄漏排查需遵循"确认趋势→抓取快照→分析定位→修复代码"流程。核心判断标准是老年代内存使用率持续上升且Full GC后不回落。使用jstat监控内存趋势,通过jmap或Arthas获取堆快照,借助MAT工具分析支配树和GC Roots引用链。常见泄漏场景包括静态集合膨胀、ThreadLocal未清理、资源未关闭等,修复需针对性地限制集合大小、及时释放资源。对于Native内存泄漏需开启NMT跟踪。排查关键在于对比内存基线变化和追踪异常对象的引用链,建议配置GC日志实现早期预警。(149字)

ywl470812087的博客 272
上一篇: Elasticsearch创建索引
下一篇: linux服务器上tomcat工程开启debug调试服务
躺平程序员
博客等级 码龄12年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值