文档章节

java程序内存分析

飓风2000
 飓风2000
发布于 2017/09/12 11:37
字数 512
阅读 37
收藏 0

1.问题描述:

一个java应用经过某种触发,CPU高,内存高。

2.分析过程:

进程编号pid=3203

(一)java进程中的线程栈信息分析

a.首先通过jstack命令查看java进程中各个线程的栈信息

jstack 3203 >1.txt     导出到1.txt文件待用

b.首先通过top -H -p pid 分析出java进程中占用cpu高的线程号

 top -H -p 3203

c.获取到占用cpu高的线程编号,转换成为16进制

d.在1.txt文件中查找线程编号

e.第一个结论,导致CPU高的是GC线程。

(二)java虚拟机在不断的做GC,这就意味着内存出现了泄露。重点导向了内存分析

a.通过jmap -histo 3203 进行进程内存分析,发现内存占用有1个G,确实很高

b.通过jmap -dump:file=/home/unilife/dump.txt 3203  生成内存信息文件dump.txt

c.由于dump.txt文件很大,使用jhat dump.txt 无法启动,于是改变方法,将dump.txt下载到本地处理

d.通过ftp将dump.txt下载到本地,下载eclipse mat,下载地址:http://www.eclipse.org/mat/

e.修改eclipse map的启动jvm大小,修改文件MemoryAnalyzer.ini,变更参数  -Xmx4024m

f.打开eclipse mat ,加载dump.txt文件

通过跟踪stack查看是哪里出了问题?

 

 

看看是什么占用类内存(通常都是我们没有控制好集合容器),看看下图吧

 

罪魁祸首是不是在这里呢??

看一个样本:

看看好吓人,这个arraylist里面居然有4843970个内容???

 

再看看一个样本:

这个mongo查询结果又31039,难道没有分页??

 

根据mat工具分析出占用内存的业务数据,可以很快定位到代码功能,进行代码级别的分析并定位问题。

总结:

两个要点:

1.根据stack定位到可以线程的可以方法

2.根据内存对象数量分析,明确导致内存高的业务数据

 

 

 

© 著作权归作者所有

共有 人打赏支持
飓风2000
粉丝 36
博文 322
码字总数 135577
作品 0
浦东
高级程序员
私信 提问
线上应用故障排查之二:高内存占用

搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模...

MZHS
2015/11/13
0
0
Java线上应用故障排查之二:高内存占用

前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。 搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang...

Kerry_Han
2014/10/27
0
0
Java 10大优点—Part4—Java内存模型

在忙着参加在爱沙尼亚进行的 TEDx talk 演讲活动以及在比利时举办的一届非常忙碌的Devoxx 会议的间隙,我将继续推进 Java’s Rocking 的系列博文。 对还没有接触过这个系列博文的读者,不妨先...

foxlee
2013/12/09
339
1
java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用

基于Sun HotSpot JVM 这里将介绍几款sun hotspot jvm 自带的监控工具: 请确保java_home/bin配置到path环境变量下,因为这些工具都在jdk的bin目录下 jps(JVM Process Status Tool):JVM机进程...

我类个擦
2014/09/12
0
1
PerfMa给OpenJDK社区提交的第一个Patch

概述 前两天给openjdk gc-dev的email list提交了一个问题,主要是针对Full GC之后,GC日志里Metaspace的大小在GC前后都一直不变的问题,我在邮件里大概也提了下如何修复该问题,以及猜测了下...

你假笨
09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
3
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
6
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
7
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
5
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部