什么是fullGC:

从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永久代即方法区的回收(JDK8中无永久带了),出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的。

会引发fullGC的几种情况:https://blog.csdn.net/qq_38384440/article/details/81710887

分析的话需要从JVM内存结构说起(根据JDK版本会有所调整):

a、JVM内存模型(图片来自网络):

b、我们主要看一下堆的构成(图片来自网络):

1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代

2.新生代可以划分为三个区,Eden区,两个幸存区

c、生存情况(图片来自网络):

定位问题:

工具:JDK自带的Jmap等工具:%JAVA_HOME%/bin/jmap

1、查看JVM参数命令:ps -ef |grep java

2、top命令查看PID

1、top命令查看PID
>top
空闲:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
159910 admin 20 0 6593m 2.2g 16m S 3.7 27.4 2:32.04 java
2270 root 20 0 296m 25m 6792 S 1.3 0.3 0:04.93 python
普通任务:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
159910 admin 20 0 6725m 2.9g 9452 S 20.6 35.8 59:38.10 java
644 root 20 0 238m 4356 3168 S 1.7 0.1 27:24.38 alisentry_cli
多线程任务:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
159910 admin 20 0 6818m 4.4g 9648 S 182.7 54.9 74:45.76 java
644 root 20 0 238m 4356 3168 S 0.8 0.1 27:30.43 alisentry_cli

3、jmap命令
注意[B 对象 ,这是一个byte数组,可以dump内存中的数据查看内容,会发现实际上就是传输的表数据


>sudo -u admin /opt/taobao/java/bin/jmap -histo:live 159910 | more
num #instances #bytes class name
空闲:
1: 16391 110613520 [Ljava.lang.Object;
2: 108702 31890616 [C
3: 8075 12048648 [B
普通任务:
1: 6740 163115880 [B
2: 16773 110638024 [Ljava.lang.Object;
3: 110747 32302984 [C
多线程任务开启:
1: 9468 2065856344 [B
2: 18254 110830840 [Ljava.lang.Object;
3: 130436 34780696 [C

查看堆栈信息:

启动任务后:
$sudo -u admin /opt/taobao/java/bin/jmap -heap 159910
Attaching to process ID 2438, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.66-b60
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 2147483648 (2048.0MB)
MaxNewSize = 2147483648 (2048.0MB)
OldSize = 2147483648 (2048.0MB)
NewRatio = 2
SurvivorRatio = 10
MetaspaceSize = 268435456 (256.0MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 268435456 (256.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):新生代区内存分布,包含伊甸园区+Survivor区
capacity = 1968570368 (1877.375MB)
used = 1965707016 (1874.6442947387695MB)
free = 2863352 (2.7307052612304688MB)
99.85454662700683% used
Eden Space:Eden区内存分布
capacity = 1789657088 (1706.75MB)
used = 1788720872 (1705.8571548461914MB)
free = 936216 (0.8928451538085938MB)
99.94768740859477% used
From Space(S1):其中一个Survivor区的内存分布
capacity = 178913280 (170.625MB)
used = 176986144 (168.78713989257812MB)
free = 1927136 (1.837860107421875MB)
98.92286587110806% used
To Space(S2):另一个Survivor区的内存分布
capacity = 178913280 (170.625MB)
used = 0 (0.0MB)
free = 178913280 (170.625MB)
0.0% used
concurrent mark-sweep generation(永久代,fullGC位置):
capacity = 2147483648 (2048.0MB)
used = 2147235096 (2047.7629623413086MB)
free = 248552 (0.23703765869140625MB)
99.98842589557171% used
32663 interned Strings occupying 3788288 bytes.

查找定位堆栈线程异常:

FULL GC 详情:sudo -u admin /opt/taobao/java/bin/jstack 159910

参考地址:

http://www.cnblogs.com/myna/p/7573843.html

https://www.cnblogs.com/kongzhongqijing/articles/3621163.html

top命令,查看java PID 为29037

ps -ef | grep java 查看java进程及相关参数

jMap:

sudo -u admin /opt/taobao/java/bin/jmap -heap 29037
sudo -u admin /opt/taobao/java/bin/jmap -histo:live 29037 | more

sudo -u admin /opt/taobao/java/bin/jmap -heap 29037
sudo -u admin /opt/taobao/java/bin/jmap -dump:format=b,file=/home/admin/mem.dat 29037
sudo -u admin /opt/taobao/java/bin/jstack 29037

【fullGC】内存监控工具的更多相关文章

  1. JVM内存监控工具 JavaMelody

    这是一个需要web部署的工具,需要在容器中部署,然后将要监控的程序添加到该程序中即可. JavaMelody是java应用的监控工具,安装部署步骤如下: 1. 首先先下载javamelody.jar ...

  2. JVM内存监控工具 Jconsole

    -------------Jconsole监视远程的linux服务器上的tomcat ----------------------------- 1.linux服务器上的tomcat 的bin/cat ...

  3. JVM内存监控工具 Jvisualvm

    这个工具是官方提供的,直接在JDK工具包下的bin目录找找就可以找到,或者打开cmd直接输入"jvisualvm"即可打开该工具(配置好java环境变量). 需要在catalina ...

  4. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  5. 你值得拥有:25个Linux性能监控工具

    一.基于命令行的性能监控工具 1.dstat - 多类型资源统计工具 该命令整合了vmstat,iostat和ifstat三种命令.同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能 ...

  6. monkey检测内存泄漏

    monkey中检查内存泄漏,实际上是对一个操作多次操作后看内存情况,内存泄漏具体的原理可百度,现在我们梳理检测内存泄漏的方法: 测试前你需要安装: 1.MAT分析工具 2.使用工具事实监控内存指标,现 ...

  7. CentOS 7上的性能监控工具

    Linux中基于命令行的性能监控工具:dstat.top.netstat.vmstat.htop.ss.glances 1.dstat – 多类型资源统计工具(需配置epel源) 该命令整合了vmst ...

  8. 25个Linux性能监控工具

    一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...

  9. iOS微信内存监控

    WeTest 导读 目前iOS主流的内存监控工具是Instruments的Allocations,但只能用于开发阶段.本文介绍如何实现离线化的内存监控工具,用于App上线后发现内存问题. FOOM(F ...

随机推荐

  1. 监听WPF依赖属性

    原文:监听WPF依赖属性 当我们使用依赖属性的时候,有时需要监听它的变化,这在写自定义控件的时候十分有用, 下面介绍一种简单的方法.   如下使用DependencyPropertyDescripto ...

  2. WPF中取得系统字体列表

    原文:WPF中取得系统字体列表 在GDI+中,我们可以通过如下方式取得系统所有字体: foreach(FontFamily f in FontFamily.Families){   // 处理代码} ...

  3. 深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式

    原文:深入WPF中的图像画刷(ImageBrush)之2--ImageBrush的铺设方式 ------------------------------------------------------ ...

  4. 第一泰泽(Tizen)智能手机发布在俄罗斯

    请看下图: 这是韩国三星公司在俄罗斯境内公布的第一款泰泽(Tizen)智能手机(今年6月2日).这说明,Tizen操作系统没有死去. 在泰泽官网上将泰泽操作系统定义为:"The OS of ...

  5. Poco logger 日志使用小析

    Poco logger 日志使用小析 Poco logger 日志使用小析 日志 logger 库选择 Pocologger 架构简析 步骤一 生成消息 步骤二 写入logger 步骤三 导入chan ...

  6. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...

  7. WPF 走马灯 文字滚动 自定义控件

    原文:WPF 走马灯 文字滚动 自定义控件 /// <summary> /// Label走马灯自定义控件 /// </summary> [ToolboxBitmap(type ...

  8. Oracle使用dblink连接SqlServer

    使用场景:当你需要从ORACLE数据库上访问另一台SqlServer数据库的数据时,Oracle提供了一个工具:gateways.通过这个工具,你可以创建dblink来连接sqlserver或其他不同 ...

  9. centos6.5安装apache2.x并更改默认80port

    因为现在nginx它已成为反向代理软件的主流.因此,linuxserver在系统.我们几乎总是安装nginx东方的,这使在同一时间使用apache带来了麻烦.因为apache它用于通过缺省80port ...

  10. [视频]产品营销之拍出好电子产品,Peter Belanger是如何为苹果产品拍照的

    Peter Belanger –他就是那些颠覆你想象的苹果产品照片的摄影师.作为旧金山的顶级产品图片设计师的 Peter,他还拥有 eBay, Nike, Pixer 和 Square 等客户. 让我 ...