内存分析工具
jmap jvm自带的分析工具 jmap 【options】pid
- -dump:生成java堆栈的快照信息
- -heap:显示java堆详细信息,使用哪种回收机制、参数配置、分代情况
- -histo:显示堆中对象统计信息,包括类、实例数量
- jamp -F -dump:format=b,file=文件名.bin 进程id ===执行时间比较长,需要等待结束
arthas
阿里巴巴开源的java诊断工具,实现jvm几乎所有的诊断功能
执行命令: java -jar arthas-boot.jar
内存泄露的抓包 headdump 监控大盘
内存分析实战
部署项目 模拟超时的代码
环境:jdk1.8
将jvm虚拟机改小
- 1.Xms512m,最小内存
- 2.Xmx1024m,最大内存
- 3.XX:ReservedCodeCacheSize预留代码缓存的大小
- 4.-XX:+UseConcMarkSweepGC,设置年老代为并发收集
将springboot服务生成jar,部署到服务器
mvn -Dmaven.test.skip -U clean package
nohup java -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=128m -server -Dserver.port=8087 -jar zctest.jar 'cztest' --spring.profiles.active=dev >>./test_info_8099.log 2>&1 &
- nohup :不挂断地运行命令用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
- java -jar: 执行jar包
- -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m 指定运行内存
- -server -Dserver.port=8087 指定运行端口
- --spring.profiles.active=dev 使用对应配置文件
- >>./test_info_8099.log 生成日志
- 2>&1 & 输入/输出重定向日志文件中
- & 符号是把该命令以后台的job的形式运行
#给shell脚本赋值
chmod +x startboot.sh
#改名
mv cztest-0.0.1-SNAPSHOT.jar zctest.jar
#给boot、服务的jar 赋值
chmod +x zctes.tjar
#查看日志
tail -500f test_info_8099.log
配置tomcat的堆栈: catalina.sh 文件增加JAVA OPTS=”-Xms256m -Xmx256m -Xmn128m
- -Xms初始堆
- -Xmx最大堆空间
- -Xmn新生代大小
访问接口:
生成内存溢出堆栈文件
杀掉测试项目
启动服务的pid和内存信息
使用ps-ef|grep java 获取进程id jps也可以获取
通过jmap获取信息
jmap -dump:live,format=b,file=heap_zctest_202212051.hprof 35025
使用arthas诊断
安装 curl -O https://arthas.aliyun.com/arthas-boot.jar
使用 java -jar arthas-boot.jar
heapdump ,在出现内存溢出的错误是,执行这个命令,可以直接下载heapdump信息
使用dashboard 查看内存信息
heapdump 分析 直接下载heapdump信息
生成文件
使用MAT MemoryAnalyzer分析heap文件
histogram 可以看到具体耗时的类,图中为上面 模拟超时的代码所报的错
Histogram:列出内存中的对象,对象的个数及大小
- class Name 类名,出问题的类
- objects(类的对象数量、对象被创建的次数)
- shallow(浅) heap 浅堆 对象内存消耗大小,不包括其他对象的引用
- Retained(保留) head 被GC能回收的内存的总和
内存分析
使用命令在jar 命令后追加 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimestamps -XX:+PrintGCApplicationStopedTime 可以查看jvm的gc信息
jstat 使用 jstat jdk自带的gc工具
jstat -gcutil pid1000 10 分析gc 每间隔10000ms 显示一次gc信息,总共显示10次
- S0:新生代susvivor0区
- S1:新生代susvivor1区
- E:新生代eden区
- O:年老代
- M:方法区回收比例 CCS:类空间回收比例
- YGC:minor gc次数
- YGCT: minor gc耗费的时间
- FGC: full gc的次数
- FGCT: full gc的耗时
- GCT: gc总耗时