内存溢出及Jvm监控工具
2016-05-21 23:40
435 查看
内存泄露与内存溢出
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间。一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
内存溢出分类
堆内存溢出
堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java heap space
永久代溢出
类的一些信息,如类名、访问修饰符、字段描述、方法描述等,所占空间大于永久代最大值,就会出现OutOfMemoryError:PermGen space
内存泄露检测手段
Jdk/bin目录下有很多检测工具
图形界面(需要更新测试机配置文件):
Jconsole
Jvisualvm
命令行工具:
Jstat –gcutil pid 1000 100
Jmap –histo pid | head -20
Jmap –heap pid
配置tomcat jvm参数
编写接口脚本
跑5分钟……
jvisualvm远程连接虚拟机监控
可以看到堆内存到达了顶点,发生了垃圾回收却没有起作用。像这样暴力的,哈哈
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间。一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
内存溢出分类
堆内存溢出
堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java heap space
永久代溢出
类的一些信息,如类名、访问修饰符、字段描述、方法描述等,所占空间大于永久代最大值,就会出现OutOfMemoryError:PermGen space
内存泄露检测手段
Jdk/bin目录下有很多检测工具
图形界面(需要更新测试机配置文件):
Jconsole
Jvisualvm
命令行工具:
Jstat –gcutil pid 1000 100
Jmap –histo pid | head -20
Jmap –heap pid
[root@zhoucentos bin]# jmap -heap 2384 //打印java heap堆内存信息 Attaching to process ID 2384, please wait... Debugger attached successfully. Client compiler detected. JVM version is 11.0-b15 using thread-local object allocation. Mark Sweep Compact GC Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 268435456 (256.0MB) NewSize = 131072000 (125.0MB) MaxNewSize = 131072000 (125.0MB) OldSize = 4194304 (4.0MB) NewRatio = 12 SurvivorRatio = 8 PermSize = 12582912 (12.0MB) MaxPermSize = 67108864 (64.0MB) Heap Usage: New Generation (Eden + 1 Survivor Space): capacity = 117964800 (112.5MB) used = 102007440 (97.28187561035156MB) free = 15957360 (15.218124389648438MB) 86.4727783203125% used Eden Space: capacity = 104857600 (100.0MB) used = 90339496 (86.15445709228516MB) free = 14518104 (13.845542907714844MB) 86.15445709228516% used From Space: capacity = 13107200 (12.5MB) used = 11667944 (11.127418518066406MB) free = 1439256 (1.3725814819335938MB) 89.01934814453125% used To Space: capacity = 13107200 (12.5MB) used = 0 (0.0MB) free = 13107200 (12.5MB) 0.0% used tenured generation: capacity = 137363456 (131.0MB) used = 40348976 (38.47978210449219MB) free = 97014480 (92.52021789550781MB) 29.373879469078005% used Perm Generation: capacity = 12845056 (12.25MB) used = 12656048 (12.069747924804688MB) free = 189008 (0.1802520751953125MB) 98.52855448820154% used
配置tomcat jvm参数
编写接口脚本
跑5分钟……
jvisualvm远程连接虚拟机监控
可以看到堆内存到达了顶点,发生了垃圾回收却没有起作用。像这样暴力的,哈哈
相关文章推荐
- Hadoop学习18--yarn配置篇-基本配置节点
- Android群英传学习-第三章:控件架构与自定义控件详解
- LINUX 三剑客老大(AWK) 日常工作总结
- linux学习之centos(三):mysql数据库的安装和配置
- vmware workstation 12安装centos 6.5
- centos 6.5 清除yum源方式
- OpenCV 开发环境环境搭建(win10+vs2015+opencv 3.0)
- 插入排序—希尔排序(Shell Sort)
- Linux环境下Apache ActiveMQ 基本安装
- Apache Flink源码解析之stream-operator
- linux下mysql的root密码忘记解决方法
- shell简单使用(六)终端设置
- NanoPi 和 BBB 的常用网址
- shell学习-符号
- Deploy Helion Openstack 2.0 KVM for Ceph
- Linux下yum安装软件
- LINUX 内核2
- 【OpenCV】通过ROI区域以及掩码实现图像叠加
- QT在windows和linux下面的安装和配置
- 【OpenCV】通过ROI区域以及掩码实现图像叠加