zoukankan      html  css  js  c++  java
  • jvm查问题

      关于实现,有些来源于自己虚拟机的效果。

    二:java提供的小工具

    1.目录

      文件位于bin下

      

    三:JPS

    1.说明

      显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),不过jps有个缺点是只能显示当前用户的进程id,要显示其他用户的还只能用linux的ps命令。

    2.用法

      

    3.jps -l 

      输出应用程序main.class的完整package名或者应用程序jar文件完整路径名

      

    4.jps -v 

      输出传递给JVM的参数

      

      说明:

      

    5.其余用法

      

    6.jps失效

      java程序启动后,会在目录/tmp/hsperfdata_{userName}/下生成几个文件,文件名就是java进程的pid,因此jps列出进程id就是把这个目录下的文件名列一下而已,至于系统参数,则是读取文件中的内容。

      我们来思考下:如果由于磁盘满了,无法创建这些文件,或者用户对这些文件没有读的权限。又或者因为某种原因这些文件或者目录被清除,出现以上这些情况,就会导致jps命令失效。

      如果jps命令失效,而我们又要获取pid,还可以使用以下两种方法:

      1、top | grep java

      2、ps -ef | grep java

    四:Jstack【本地操作】

    1.说明

      主要用于生成指定进程当前时刻的线程快照,线程快照是当前java虚拟机每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致长时间等待。

    五:Jmap

    1.说明

      主要用于打印指定java进程的共享对象内存映射或堆内存细节。

      堆Dump是反映堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。一般在内存不足,GC异常等情况下,我们会去怀疑内存泄漏,这个时候就会去打印堆Dump。

      

    2.用法

      

    3.jmap pid

      打印的信息分别为:共享对象的起始地址、映射大小、共享对象路径的全程。

      

    4.jmap -heap pid:查看堆使用情况

      

      网上的一些解释:

      

      jdk最新的解释:

      

    5.jmap -histo pid:查看堆中对象数量和大小

      

       

      打印的信息分别是:序列号、Class实例的数量、内存的占用、类限定名

      如果是内部类,类名的开头会加上*,如果加上live子参数的话,如jmap -histo:live pid,这个命名会触发一次FUll GC,只统计存活对象

    6.jmap -dump:format=b,file=heapdump pid:将内存使用的详细情况输出到文件

         然后使用jhat命令查看该文件:jhat -port 4000 文件名 ,在浏览器中访问http:localhost:4000/

     总结:

     该命令适用的场景是程序内存不足或者GC频繁,这时候很可能是内存泄漏。通过以上命令查看堆使用情况、大量对象被持续引用等情况。

     六:jstat

    1.说明

      主要是对java应用程序的资源和性能进行实时的命令行监控,包括了对heap size和垃圾回收状况的监控。

    2.使用方式

      

      option:我们经常使用的选项有gc、gcutil

      vmid:java进程id

      interval:间隔时间,单位为毫秒

      count:打印次数

    3. jstat -gc pid 5000 2

      

      S0C:年轻代第一个survivor的容量(字节)

      S1C:年轻代第二个survivor的容量(字节)

      S0U:年轻代第一个survivor已使用的容量(字节)

      S1U:年轻代第二个survivor已使用的容量(字节)

      EC:年轻代中Eden的空间(字节)

      EU:年代代中Eden已使用的空间(字节)

      OC:老年代的容量(字节)

      OU:老年代中已使用的空间(字节)

      PC:永久代的容量

      PU:永久代已使用的容量

      YGC:从应用程序启动到采样时年轻代中GC的次数

      YGCT:从应用程序启动到采样时年轻代中GC所使用的时间(单位:S)

      FGC:从应用程序启动到采样时老年代中GC(FULL GC)的次数

      FGCT:从应用程序启动到采样时老年代中GC所使用的时间(单位:S)

    4.jstat -gcutil PID 5000 20

      

      s0:年轻代中第一个survivor已使用的占当前容量百分比

      s1:年轻代中第二个survivor已使用的占当前容量百分比

      E:年轻代中Eden已使用的占当前容量百分比

      O:老年代中已使用的占当前容量百分比

      P:永久代中已使用的占当前容量百分比

    七:jhat

    1.说明

      主要用来解析java堆dump并启动一个web服务器,然后就可以在浏览器中查看堆的dump文件了。

      生成dump文件的方法前面已经介绍了,这边主要介绍如何解析java堆转储文件,并启动一个web server

    2.jhat heapdump

      

      

      这个命令将heapdump文件转换成html格式,并且启动一个http服务,默认端口为7000。

      如果端口冲突,可以使用以下命令指定端口:jhat -port 4000 heapdump

      下面我们来访问下:ip:port

    八:jinfo

    1.说明

      jinfo可以用来查看正在运行的java运用程序的扩展参数,甚至支持在运行时动态地更改部分参数。

      

    九:jcmd

    1.说明

      在JDK 1.7之后,新增了一个命令行工具jcmd。它是一个多功能工具,可以用来导出堆,查看java进程,导出线程信息,执行GC等。jcmd拥有jmap的大部分功能,Oracle官方建议使用jcmd代替jmap。

    2.

      使用 jcmd -l 命令列出当前运行的所有虚拟机

      针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令

      

      其中,

    • VM.native_memory
    • VM.commercial_features
    • GC.rotate_log
    • ManagementAgent.stop
    • ManagementAgent.start_local
    • ManagementAgent.start
    • Thread.print,                         打印线程栈信息
    • GC.class_histogram,              查看系统中类统计信息
    • GC.heap_dump,                    导出堆信息,与jmap -dump功能一样
    • GC.run_finalization,               触发finalize()
    • GC.run,                                触发gc()
    • VM.uptime,                           VM启动时间
    • VM.flags,                              获取JVM启动参数
    • VM.system_properties,          获取系统Properties
    • VM.command_line,                 启动时命令行指定的参数
    • VM.version
    • help

    3.使用

      

     


  • 相关阅读:
    [NOIP2013]华容道
    [随笔]冲NOIP一等奖。。
    [NOIP2015]联合权值
    [随笔]我回来啦!
    [考试]20151105
    [知识点]最近公共祖先LCA
    [BZOJ3751/NOIP2014]解方程
    [旧版][知识点]字符串Hash
    NOIP2016题解
    NOIP2016游记
  • 原文地址:https://www.cnblogs.com/juncaoit/p/13384332.html
Copyright © 2011-2022 走看看