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 监控以及内存分析的更多相关文章

  1. 运维-JVM监控之内存泄漏

    转载:https://blog.csdn.net/zdx_csdn/article/details/71214219 jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法.堆配置参数 ...

  2. java面试-JDK自带的JVM 监控和性能分析工具用过哪些?

    一.JDK的命令行工具 1.jps(JVM Process Status Tools):虚拟机进程状况工具 jps -l 2.jinfo(Configuration Info for java):Ja ...

  3. JDK工具(查看JVM参数、内存使用情况及分析等)

      在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一 ...

  4. UAVStack JVM监控分析工具:图形化展示采集及分析监控数据

    摘要:UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据:同时提供JVM基本参数获取.内存dump.线程分析.内存分配采样和热点方法分析等功能. 引言 ...

  5. Java调优之jvm和线程的内存分析

    本文来源于铁木箱子的博客http://www.mzone.cc 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立 ...

  6. 利用MAT玩转JVM内存分析(一)

    本文首发于公众号:javaadu 尽管JVM提供了自动内存管理的机制,试图降低程序员的开发门槛,确实也实现了这一目标,在日常开发中,我们一般都不需要关心对象的内存释放.JVM大部分都是使用trace算 ...

  7. unity优化测试插件推荐:内存分析,数据监控,弱网模拟

    1.内存分析插件,unity官方出品 官方地址:https://bitbucket.org/Unity-Technologies/memoryprofiler 我整理的:https://downloa ...

  8. 大数据学习--day13(字符串String--源码分析--JVM内存分析)

    字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...

  9. 学习记录--JVM内存分析

    今天刷牛客网的题时,看到了两位大神关于JVM内存分析的讲解,就顺手记录学习一下. JVM内存模型图 方法区域存放了所加载的类的信息(名称.修饰符等).类中的静态变量.类中定义为final类型的常量.类 ...

随机推荐

  1. console命令详解:(转载学习)

    Console命令详解,让调试js代码变得更简单   Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些 ...

  2. nyoj1087——摆格子——————【规律题】

    摆方格 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的 ...

  3. VS2008、 VS2010 、 VS2012、 VS2013 都能用的快捷键

    VS2008.  VS2010  . VS2012.  VS2013 都能用的快捷键 Ctrl+E,D             --格式化全部代码 Ctrl+K,F              --格式 ...

  4. python学习(七)--豆瓣爬取电影名,评分以及演员

    import requestsimport re #爬取豆瓣电影排名pageNum = int(input("要查看第几页电影分数:"))#已知豆瓣默认每页展示20条#url= & ...

  5. Thrift笔记(三)--Thrift框架通信源码分析

    Thrift 客户端调用RPC的Demo public static void main(String[] args) throws Exception { TTransport transport ...

  6. 【数据库】2.0 MySQL入门学习(二)——如何获得MySQL以及MySQL安装

    1.0 如何获得MySQL: www.oracle.com https://dev.mysql.com/downloads/ 2.0 例如进入Oracle官网,找到MySQL: 进入页面后,切换到“资 ...

  7. input文本框点击第一次光标在最右边

    效果: 样式效果引入bootstrap4.0就OK了. HTML代码: <div class="input-group w-25"> <div class=&qu ...

  8. css 小常识

    一.vertical-align可以采用负值(正/负值根据基线上下移动),也可以采用百分比值,而这个百分比值不是相对于字体大小或者其他什么属性计算的,而是相对于line-height计算的. 此外,w ...

  9. 【阿里云产品公测】PTS压力测试最低配ECS性能及评测

    PTS是一个性能测试工具,可以使用PTS对自身系统性能在阿里云环境里的状况进行整体评估来找出你的系统性能瓶颈从而优化系统,同时你还可以在了解自己的系统性能指标情况下便于未来新增扩容.在使用PTS前你必 ...

  10. C/C++函数指针,指针函数的用法,用处

     先看函数指针 int func2(int x); /* 声明一个函数 */ int (*q2) (int x); /* 声明一个函数指针 */ q2=func2;    /* 将func函数的首地址 ...