• 性能排查常用命令


    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、内存泄露和内存溢出的区别是什么?

    内存泄漏时代码问题

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

  • 相关阅读:
    Java基本开发环境搭建(适合第一次使用)
    在oracle中通过链接服务器(dblink)访问sql server
    C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
    经典SQL语句大全
    程序员为何要写技术博客?
    收缩SQL数据库日志
    利用脚本设置本机IP地址
    在SQL Server 2005中连接Oracle,完成查询、插入操作
    Centos 7 下 Corosync + Pacemaker + psc + HA-proxy 实现业务高可用
    Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用
  • 原文地址:https://www.cnblogs.com/aligege/p/8397997.html
Copyright © 2020-2023  润新知