JVM 监控以及内存分析
1 内存分析
1.1 jmap -histo 命令
pid=`jps | awk '{if ($2 == "Jps") print $1}'`
jmap -histo $pid >>1.txt 查看pid中类的内存占用
num #instances(实例数) #bytes(占用字节) class name
class name 解读
B代表byte
C代表char
D代表double
F代表float
I代表int
J代表long
Z代表boolean
前边有[代表数组,[I 就相当于int[]
对象用[L+类名表示
如果某个类的个数特别多, 就得检查是否内存溢出了。
1.2 命令 jmap -heap
jmap -heap 22792
Attaching to process ID 22792, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 19.0-b09
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40 # 对应jvm启动参数 -XX:MinHeapFreeRatio 设置JVM堆最小空闲比率 (默认40)
MaxHeapFreeRatio = 70 # 对应jvm启动参数 -XX:MaxHeapFreeRatio 设置JVM堆最大空闲比率 (默认70)
MaxHeapSize = 10737418240 (10240.0MB) # 对应jvm启动参数 -XX:MaxHeapSize 设置JVM堆的最大大小
NewSize = 5368709120 (5120.0MB) # 对应jvm启动参数 -XX:NewSize 设置JVM堆的年轻代的默认大小
MaxNewSize = 5368709120 (5120.0MB) # 对应jvm启动参数 -XX:MaxNewSize 设置JVM堆的年轻带的最大大小
OldSize = 5439488 (5.1875MB) # 对应jvm启动参数 -XX:OldSize 设置JVM堆的老年代的大小
NewRatio = 2 # 对应jvm启动参数 -XX:NewRatio 老年代与年轻代的大小比率
SurvivorRatio = 8 # 对应jvm启动参数 -XX:SurvivorRatio 设置年轻代中Eden区与Survivor区的大小比值
PermSize = 21757952 (20.75MB) # 对应jvm启动参数 -XX:PermSize 设置JVM堆的持久带的初始大小
MaxPermSize = 1073741824 (1024.0MB) # 对应jvm启动参数 -XX:MaxPermSize 设置JVM堆的永生代的最大大小
Heap Usage:
PS Young Generation
Eden Space: # Eden区内存分布 总量 已使用 空闲 使用比率
capacity = 5357305856 (5109.125MB)
used = 1647437208 (1571.118553161621MB)
free = 3709868648 (3538.006446838379MB)
30.751225565270396% used
From Space: # 其中一个Survivor(sərˈvaɪvər)区内存分布 总量 已使用 空闲 使用比率
capacity = 5898240 (5.625MB)
used = 2375696 (2.2656402587890625MB)
free = 3522544 (3.3593597412109375MB)
40.278049045138886% used
To Space: # 另一个Survivor区内存分布 总量 已使用 空闲 使用比率
capacity = 5505024 (5.25MB)
used = 0 (0.0MB)
free = 5505024 (5.25MB)
0.0% used
PS Old Generation # 当前老年代内存分布 总量 已使用 空闲 使用比率
capacity = 5368709120 (5120.0MB)
used = 181392168 (172.98905181884766MB)
free = 5187316952 (4947.010948181152MB)
3.3786924183368683% used
PS Perm Generation # 当前持久代内存分布 总量 已使用 空闲 使用比率
capacity = 72286208 (68.9375MB)
used = 72213176 (68.86785125732422MB)
free = 73032 (0.06964874267578125MB)
99.89896827898346% used
1.3
jstat -gcutil [pid] [internal] 很实用
S0: Survivor space 0 区已使用空间的百分比
S1: Survivor space 1 区已使用空间的百分比
E: Eden space 区已使用空间的百分比
O: Old space 区已使用空间的百分比
P: Perm space 区已使用空间的百分比
YGC: Young GC 的次数
YGCT: Young GC 所用的时间 单位秒
FGC: Full GC 的次数
FGCT: Full GC 所用的时间 单位秒
GCT: 用于垃圾回收的总时间 单位秒
1.4
尽量减少Full GC的次数, 因为Full GC的消耗要比Monitor GC要大
年轻代大小: 尽可能设大, 降低年轻代GC次数, 同时也减少达到老年代的对象?
分配堆栈的最小值最好等于最大值, 因为动态分配也是需要耗费时间的. 如年轻代, 老年代, 持久代的最小最大值可设为一致
参考
http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
2 参数调优
http://blog.csdn.net/historyasamirror/article/details/6233007
JVM 监控以及内存分析的更多相关文章
- 运维-JVM监控之内存泄漏
转载:https://blog.csdn.net/zdx_csdn/article/details/71214219 jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法.堆配置参数 ...
- java面试-JDK自带的JVM 监控和性能分析工具用过哪些?
一.JDK的命令行工具 1.jps(JVM Process Status Tools):虚拟机进程状况工具 jps -l 2.jinfo(Configuration Info for java):Ja ...
- JDK工具(查看JVM参数、内存使用情况及分析等)
在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一 ...
- UAVStack JVM监控分析工具:图形化展示采集及分析监控数据
摘要:UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据:同时提供JVM基本参数获取.内存dump.线程分析.内存分配采样和热点方法分析等功能. 引言 ...
- Java调优之jvm和线程的内存分析
本文来源于铁木箱子的博客http://www.mzone.cc 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立 ...
- 利用MAT玩转JVM内存分析(一)
本文首发于公众号:javaadu 尽管JVM提供了自动内存管理的机制,试图降低程序员的开发门槛,确实也实现了这一目标,在日常开发中,我们一般都不需要关心对象的内存释放.JVM大部分都是使用trace算 ...
- unity优化测试插件推荐:内存分析,数据监控,弱网模拟
1.内存分析插件,unity官方出品 官方地址:https://bitbucket.org/Unity-Technologies/memoryprofiler 我整理的:https://downloa ...
- 大数据学习--day13(字符串String--源码分析--JVM内存分析)
字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...
- 学习记录--JVM内存分析
今天刷牛客网的题时,看到了两位大神关于JVM内存分析的讲解,就顺手记录学习一下. JVM内存模型图 方法区域存放了所加载的类的信息(名称.修饰符等).类中的静态变量.类中定义为final类型的常量.类 ...
随机推荐
- C++ Memory System Part3 : 优化
前面的系列我们讲了自定义new和delete操作,其中针对deleteArray的问题还有需要优化的地方.我们这次就针对POD类型进行一次优化. 下面的代码是针对POD类型的模板函数实现,分别为New ...
- matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
找到了2个函数:unique和ismember 1. 去掉其中的重复行:unique 例子: IDX = [,,; ,,; ,,; ,,; ,,; ,,]; classNo = unique(IDX, ...
- 深入redis内部之redis启动过程之一
redis作为一个服务器,它的启动是从main函数开始的.redis.c 1. 进程重命名 #ifdef INIT_SETPROCTITLE_REPLACEMENT spt_init(argc, ar ...
- 【坑】自动化测试之Excel表格
参考一位大神的博客项目架构,把元素和数据都参数化,但是总是被excel表格坑 1.无法下拉 动作列通过下拉列表来控制,点击下拉列表无反应 解决方案:不知道是不是中间动了什么,因为Excel版本的问题, ...
- URAL 1252 ——Sorting the Tombstones——————【gcd的应用】
Sorting the Tombstones Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- python 模板注入
今天学习了python的模板注入,这里自己搭建环境测试以下,参考文章:http://www.freebuf.com/articles/web/136118.html web 程序包括两个文件: fla ...
- socket 客户端和服务端通信
客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...
- 数据从mysql迁移到hbase的一些思考及设计
一.进行迁移的原因 由于业务的发展,使用mysql进行建立索引进行搜索已经造成数据流的瓶颈卡在了数据库io,例如每次dump全表的时候,会造成压力过大,造成耗时很长,并且当前的数据量基本上已经达到了亿 ...
- asp 2.0 ajax triggers 触发更新
- sql查询时,根据特定的条件给表的某一个字段赋值
先讲一下需要这个需求的情景: 这是一个招聘求职项目遇到的一个问题.个人A向公司B的职位投递简历后,公司B会收到个人A的简历;但是A投递后把简历删除,公司收到的简历信箱 还有这个简历,但却不能看了. 原 ...