性能排查常用命令

1、查看垃圾回收情况

jstat -gc pid 1000 10       1秒钟打印一次,共打印10次停止

2、查看JVM启动参数

jinfo -flags pid

3、JVM启动参数中增加gc日志参数   。gc日志分析参考:http://swcdxd.iteye.com/blog/1859858

  -XX:+PrintGC 输出GC日志

  -XX:+PrintGCDetails 输出GC的详细日志

  -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)

  -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

  -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息

  -Xloggc:../logs/gc.log 日志文件的输出路径

  -XX:ReservedCodeCacheSize=128m   调整代码缓存区大小。代码缓存区满的时候,会报OutOfMemoryError

  在启动参数里加个-XX:+DisableExplicitGC  ,可以禁止业务代码主动调用System.gc()进行full gc

  配置如:

    -XX:+PrintGCDetails -Xloggc:../logs/gc.log -XX:+PrintGCTimeStamps  

4、System.gc()执行的是full gc,日志中,会有(System)的标记

5、full gc 太频繁的排查思路

参考:http://blog.csdn.net/chenleixing/article/details/46706039

参考:http://blog.csdn.net/shiyong1949/article/details/52585256

其中以下两点可能不好排查:

  5、统计得到的Minor GC晋升到旧生代的平均大小大于老年代的剩余空间

  6、堆中分配很大的对象

6、几种内存溢出的场景

参考:http://blog.csdn.net/u011080472/article/details/51322119

对于强引用, 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题

7、内存泄露和内存溢出的区别是什么?

内存泄漏时代码问题

内存溢出是现象。可能是因为内存泄漏导致的,也可能是配的启动参数有问题

原文地址:https://www.cnblogs.com/aligege/p/8397997.html