java服务内存占用过高

本文介绍了如何通过命令行工具jmap和MemoryAnalyzer(MAT)进行Java内存分析,包括查看内存占用高的进程、对象个数及内存大小、导出内存镜像、安装MAT工具以及使用MAT进行详细分析。在内存溢出或性能瓶颈问题排查时,这些方法能帮助定位问题代码,优化内存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


以下代码没有特殊说明,都是指终端命令行操作

1、查看内存占用高的进程
top

在这里插入图片描述

2、查看对象个数和占用内存大小
jmap -histo 624

在这里插入图片描述
可以看到程序中各个对象所占用内存的情况,根据占用字节数大小降序显示,这里只能看出哪些对象占用内存高,但是还不能具体定位到问题代码,需要进一步排查。
有个自定义的类Animal,个数和占用内存比较高,是重点怀疑对象。
图中一些特殊字符的含义如下:

符号含义
[C表示char[],一般与String对象相关,因为String其实就是基于char数组实现的
[S表示short[]
[I表示int[]
[B表示byte[]
[Z表示boolean[]
[J表示long[]
[F表示float[]
[D表示double[]
[II表示int[][]
[Ljava.lang.Objectjava.lang.Object类型的数组
[Ljava.lang.Stringjava.lang.String类型的数组
3、导出内存镜像
jmap -dump:format=b,file=testDump.hprof 624

在这里插入图片描述

4、安装独立版本的Memory Analyzer工具

下载链接:
http://www.eclipse.org/mat/downloads.php

5、使用MAT工具进行分析
  1. 打开dump文件
    在这里插入图片描述

  2. 查看对象个数和占用内存数
    在这里插入图片描述

  3. 查看每个线程的内存使用情况
    在这里插入图片描述

6、注意

当dump文件过大时,Memory Analyzer工具会提示解析出错

An internal error occurred during: "Parsing heap dump from '/Users/mac/cece/testDump.hprof'".
Java heap space

需要找到配置文件MemoryAnalyzer.ini,修改-Xmx的配置大小,如:

-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.2.200.v20210527-0259
-vmargs
-Xmx4g	
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread

-Xmx配置的默认大小为1024m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值