首页 技术 正文
技术 2022年11月6日
0 收藏 781 点赞 991 浏览 1568 个字

1. jps

  使用 jps -l -m 获取到当前jvm进程的pid,通过上述命令获取到了服务的进程号

jps(JVM Process Status Tool):显示指定系统内所有的HotSpot虚拟机进程
jps -l -m :参数-l列出机器上所有jvm进程,-m显示出JVM启动时传递给main()的参数

2. jstat

  使用 jstat 观察jvm状态,因为是OOM异常,所以我们首先重启机器观察了JVM的运行情况;

  我们使用 jstat – gc pid time命令观察GC,发现GC在YGC后,GC掉的内存并不多,每次YGC后都有一部分内存未回收,导致在多次YGC后回收不掉的内存被挪到堆的old区,old满了之后FGC发现也是回收不掉;

  这里基本可以确定是内存泄漏的问题了,下面我们有简单看了下机器的cpu、内存、磁盘状态

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat - gc pid time :-gc 监控jvm的gc信息,pid 监控的jvm进程id,time每个多少毫秒刷新一次
jstat - gccause pid time :-gccause 监控gc信息并显示上次gc原因,pid 监控的jvm进程id,time每个多少毫秒刷新一次
jstat - class pid time:-class 监控jvm的类加载信息,pid 监控的jvm进程id,time每个多少毫秒刷新一次

 3. top

  使用 top -p pid 获取进程的cpu和内存使用率;查看RES 和 %CPU %MEM三个指标:

VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。ps : 如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。

  这个命令是查看计算机的状态,如果没有进程占用过多的计算机资源,就基本可以确定是JVM内存泄露问题,针对JVM进程拍排查问题就好了。

4. jmap

  我们使用 jmap -dump : format=b, file=dump_file_name pid 命令,将当前机器的jvm的状态dump下来或缺的一份dump文件,用做下面的分析

jmap(JVM Memory Map)命令用于生成heap dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
jmap -dump : format=b, file=dump_file_name pid :file=指定输出数据文件名, pid jvm进程号

 5. Dump分析

  接下来就是dump文件分析了,分析工具有很多,比如:Jprofiler,MAT(MemoryAnalyzer) 等,找到具体内存泄露的代码,解决问题。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,488
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289