最近在测一个接口时,发现在并发压力的情况下,用jconsole监控JVM后,发现服务器灰常耗费内存导致GC频繁从而影响了性能,故想找到程序中具体哪块比较耗费内存。搜索一些资料后,终于找到了一个好用而界面直观的工具,能帮助我们很好的分析内存的耗费情况~
先说明一个linux下的命令 jps和 jmap :
jps 用于列出所有java相关线程的pid等信息,如:
[root@myjrjapp-100 ~]# jps
23178 Jps
20289 Bootstrap
其中,“20289 Bootstrap”是指系统中运行的tomcat进程号和进程名。
jmap 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。jmap -dump:format=b,file=f1 3024 可以将3024进程的内存heap输出出来到f1文件里。它可以打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)
如:jmap pid 打印内存使用的摘要信息
分析方法1:
以上两个命令可以结合起来用,例如:
[root@myjrjapp-100 ~]# jps
23178 Jps
20289 Bootstrap
[root@myjrjapp-100 ~]# jmap 20289
Attaching to process ID 20289, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b19
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 1048576 (1.0MB)
MaxNewSize = 4294901760 (4095.9375MB)
OldSize = 4194304 (4.0MB)
NewRatio = 8
SurvivorRatio = 8
PermSize = 134217728 (128.0MB)
MaxPermSize = 268435456 (256.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 118358016 (112.875MB)
used = 38070328 (36.30669403076172MB)
free = 80287688 (76.56830596923828MB)
32.165398919833194% used
From Space:
capacity = 458752 (0.4375MB)
used = 155664 (0.1484527587890625MB)
free = 303088 (0.2890472412109375MB)
33.932059151785715% used
To Space:
capacity = 458752 (0.4375MB)
used = 0 (0.0MB)
free = 458752 (0.4375MB)
0.0% used
PS Old Generation
capacity = 954466304 (910.25MB)
used = 72784624 (69.41282653808594MB)
free = 881681680 (840.8371734619141MB)
7.625688166776813% used
PS Perm Generation
capacity = 134217728 (128.0MB)
used = 38192248 (36.42296600341797MB)
free = 96025480 (91.57703399658203MB)
28.455442190170288% used
[root@myjrjapp-100 ~]#
分析方法2:
使用jmap命令dump内存出来:
jmap -dump:live,format=b,file=heap.bin 8023
之后会在当前目录创建一个”heap.bin”文件,会有好几百M大小。可以把此文件进行压缩,然后再传到其他windows机器中进行结果分析。
[root@openAS-main ~]# gzip heap.bin
分析:
在测试机上安装一个分析工具:MemoryAnalyzer-Incubation-0.8.0.20100408-win32.win32.x86 这是Eclipse MAT,是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。
分析截图:
详细数据信息:
从上面两个图中就能具体分析出是程序中的哪块耗费掉了大量的内存啦~
相关推荐
此外,除了GDB,还可以使用Valgrind、LeakSanitizer等工具进行更深入的内存泄漏检测。Valgrind提供了一整套内存错误检测工具,包括Memcheck,它能检测内存泄露、使用未初始化的内存和内存越界等问题。LeakSanitizer...
Iframe 内存泄露分析是指在使用 Iframe 时,由于互相引用、闭包、跨页面泄漏、伪泄漏等原因,导致浏览器内存泄漏的问题。这种问题在 Ajax 盛行以前并不是什么大问题,因为都是通过页面跳转和刷新来进行与服务端的...
标题中的“vs2010内存泄露检查工具”指的是Visual Leak Detector(VLD),这是一个为Visual C++编译器设计的插件,它可以在运行时检测并报告C++程序中的内存泄漏情况。VLD能够集成到VS2010的环境中,使得开发者可以...
最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递getApplicationContext。 1.避免在xml直接写webview...
2. **MAT (Memory Analyzer Tool)**:Eclipse 提供的专门用于分析Java堆内存的工具,它能帮助开发者定位内存泄漏的具体对象和引用链。MAT的 Leak Suspects 报告和 Dominator Tree 功能特别适用于发现潜在的内存泄露...
当我们谈论"Delphi new\dispose内存泄露问题解决方案"时,我们聚焦的是如何正确地分配和释放内存,尤其是针对结构体指针和字符串类型,这是Delphi内存泄漏问题的常见来源。本文将深入探讨这个问题,并提供相应的解决...
内存泄漏是C++编程中一个严重的问题,它指的是程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无害,但随着时间推移,大量的内存泄漏会消耗掉系统的可用内存,导致性能下降甚至系统崩溃。...
在Windows操作系统中,内存泄漏是一种常见的性能问题,它会导致系统资源逐渐消耗殆尽,影响程序的稳定性和整体系统的运行效率。为了解决这个问题,开发者通常会使用专门的内存泄漏检测工具。本文将详细介绍两个用于...
### Linux 内存泄露查找详解 #### 一、引言 在进行Linux C语言编程时,内存管理一直是程序员关注的重点之一。特别是在动态内存分配场景下,如果不妥善处理,很容易出现内存泄露的问题。内存泄露不仅会消耗系统资源...
在Linux系统中,内存泄漏是程序开发中一个严重的问题,会导致系统资源逐渐耗尽,影响程序的稳定性和系统的整体性能。解决这个问题的关键在于能够有效地检测并定位内存泄漏的位置。本资料包提供了一种常用且强大的...
JNI层内存泄漏检测工具是针对Android应用开发中的一个重要问题——JNI内存泄漏的解决方案。JNI,全称为Java Native Interface,允许Java代码与其他编程语言(如C++)交互,从而利用其性能优势。然而,由于Java和C/...
在C++编程中,内存管理是一项关键任务,而内存泄漏是开发者经常遇到的挑战。内存泄漏指的是程序在分配了内存后未能正确释放,导致这部分内存无法再被程序使用,随着时间推移,大量的内存泄漏可能会耗尽系统资源,...
3. Purify:Purify 是IBM开发的一款高级内存和线程错误检测工具,它能检测内存泄漏、双重释放、非法内存访问等问题。虽然Purify主要用于IBM AIX系统,但也有Windows和Linux版本。 4. Dr. Memory:Dr. Memory 是一款...
Electron-Vue 开发环境内存泄漏问题汇总 本文主要介绍了 Electron-Vue 开发环境中内存泄漏问题的解决方案。 Electron-Vue 是一个基于 Electron 和 Vue.js 的开发框架,用于构建桌面应用程序。然而,在开发环境中,...
### 详解QT内存泄露问题 在探讨QT内存管理机制及如何避免内存泄露之前,我们首先应当理解何为内存泄露。内存泄露是指程序中已分配的堆内存由于未能释放,导致一直占用这部分内存空间,最终可能导致应用程序运行缓慢...
### Windows 下 C++ 内存泄露检测工具使用详解 在 Windows 平台下进行 C++ 开发时,内存管理是一项非常重要的任务。由于 C++ 语言本身的特性,开发者需要手动管理内存分配与释放,这就很容易导致内存泄露的问题。...
"arm环境内存泄漏检测工具valgrind"就是这样一个针对ARM平台的专业工具,它能帮助我们识别并解决内存泄漏问题。 Valgrind是一个开源的动态分析工具集,主要用于调试、性能评估和内存错误检测。在ARM环境下,...
OpenCV中的内存泄露问题解决方案 在使用OpenCV时,经常会遇到内存泄露的问题,特别是在使用cvLoadImage和cvCloneImage函数时。这些函数的使用不当将导致内存泄露,影响程序的稳定性和性能。本文将详细介绍这两个...
在应用的Application类中安装LeakCanary,这样每当应用运行时,它就会自动检测内存泄露,并在检测到问题时通过通知栏提供详细的泄漏信息。点击通知可以直接查看泄漏的对象和引用链,极大地简化了内存泄露的诊断过程...