• JVM 性能调优监控工具


    声明:本文转自《https://www.cnblogs.com/anxiao/p/6796644.html?utm_source=itdadao&utm_medium=referral》

    企业级应用开发中经常会遇到以下问题,可以使用工具对JVM进行监管,以便及时查找问题所在。
    1)内存不足OutOfMemory(大对象没有gc等),内存泄露;
    2)线程死锁,线程数过多;
    3)锁争用(Lock Contention),资源未及时释放(数据库);
    4)Java进程CPU消耗过高.

    Java安装目录的bin文件加下有一些工具可以用来监控JVM性能,如jconsole、jvisualvm、jmap、jps、jstack、jhat、jstat等。

    1.   jconsole

      jconsole可以监控Java应用程序(如jar应用、tomcat等),但被监视的应用程序必须和jconsole是用同一个用户运行的。jvisualvm的使用和jconsole类似。

    • 本地监控:  jconsole  pid 
    • 远程监控:  jconsole  [ hostname:portNum ]      

          使用远程监控需要配置jmx代理信息,修改Tomcat的bin目录下的catalina.bat。

    set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=HostIP
    set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8888
    set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
    set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false

      连接成功后可以在overview中查看内存、线程、类及CPU使用情况:

          

    2.  probe

      Lambda Probe 是基于 Web + AJAX 的强大的免费开源工具,可以用来实时管理一个单独的host。LambdaProbe拥有几乎所有Tomcat Manager的功能,还包括应用程序、数据源、发布、日志、线程、集群、系统信息、状态、连接器状态这些功能,并能显示 Server 的详细内存占用状态。

      probe war包下载

    3.   jmap

       打印java进程的堆内存信息。

    • jmap -heap pid         查看heap的概要信息,GC使用的算法、heap的配置及wise heap的使用情况.
    • jmap -histo[:live] pid     查看堆内存中的每个类的类名、实例数量、内存占用大小
    • jmap -dump:live, format=b, file=fileName pid       将内存使用情况导出到文件中,再用jhat、MAT、VisualVM分析查看,以便查找内存溢出原因

    4. jhat

      jhat可以对JVM中导出的文件进行分析,使用命令 jhat fileName 即可以在浏览器中输入http://localhost:7000查看内存信息。如果Dump文件太大需要加上-J-Xmx512m指定最大堆内存,如 jhat -J-Xmx512m [-port 9998] tmp.bin

      分析内存还可以使用Eclipse的Memory Analyzer,插件地址http://download.eclipse.org/releases/juno,找到General Purpose Tools底下的Memory Analyzer并安装。

    5. jstat

      查看classloader,compiler,gc相关信息,实时监控资源和性能 。jstat工具特别强大,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

    语法结构:

           jstat -<option> [-t] [-h<lines>] <pid> [<interval> [<count>]]

    Options — 通常使用 -gcutil 查看gc情况
    interval – 间隔时间,单位为秒或者毫秒
    count — 打印次数,如果缺省则打印无数次

    结果说明:

    S0     — Heap上的 Survivor space 0 区已使用空间的百分比
    S1     — Heap上的 Survivor space 1 区已使用空间的百分比
    E       — Heap上的 Eden space 区已使用空间的百分比
    O      — Heap上的 Old space 区已使用空间的百分比
    P       — Perm space 区已使用空间的百分比
    YGC  — 从应用程序启动到采样时发生 Young GC 的次数
    YGCT— 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
    FGC  — 从应用程序启动到采样时发生 Full GC 的次数
    FGCT— 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
    GCT  — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

    • jstat –class<pid> :          显示加载class的数量,及所占空间等信息。
    • jstat -compiler <pid>:    显示VM实时编译的数量等信息。
    • jstat -gc <pid>:              显示gc的信息,查看gc的次数,及时间。
    • jstat -gccapacity <pid>: 显示VM内存中三代(young,old,perm)对象的使用和占用大小
    • jstat -gcutil <pid>:         统计gc信息
    • jstat -gcnew / gcnewcapacity<pid>: 年轻代对象的信息(及其占用量)。
    • jstat -gcold / gcoldcapacity <pid> :old代对象的信息(及其占用量)。
    • jstat -gcpermcapacity  <pid>:            perm对象的信息及其占用量。
    • jstat -printcompilation <pid>:            当前VM执行的信息。

    6. jstack

      jstack用于生成java虚拟机当前时刻的线程快照,主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

    语法:  jstack [ option ] pid

        -F 当 jstack [-l] pid 没有响应的时候强制打印栈信息
        -l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
     

    7. jps

    用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。

          命令格式:jps [options ] [ hostid ] 

    [options]选项 :
    -q: 输出VM标识符pid
    -m:输出main method的参数 
    -l:  输出完全的包名,应用主类名,jar的完全路径名 
    -v: 输出jvm参数 
    -V: 输出通过flag文件传递到JVM中的参数
    -Joption:传递参数到vm,例如:-J-Xms512m

            [hostid]:[protocol:][[//]hostname][:port][/servername]

     
     
     
  • 相关阅读:
    CentOS 软件安装(yum 和 rpm)
    Ubuntu下的 PPPoE 拨号上网方法
    Vim 去除因为 Unix 和 Windows 换行符不同带来的 ^M 问题
    Python 在 Windows 下安装第三方包,报 Python 未注册的问题解决
    scipy 安装错误及解决
    Python 字典一个易犯的错误
    Linux查看系统信息
    系统更新报错--NO_PUBKEY
    关于直播的技术整理2
    关于直播的技术整理
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/8785056.html
Copyright © 2020-2023  润新知