zoukankan      html  css  js  c++  java
  • 虚拟机性能监控与故障处理工具------JDK的命令行工具

    ①jps:虚拟机进程状况工具

    功能:列出正在运行的虚拟机进程,并显示1、虚拟机执行主类名称以及2、这些进程的本地虚拟机唯一ID(LVMID)。

    使用频率最高的JDK命令行工具,其他的JDK工具大多需要输入它查询到的LVMID来确定监控的是哪一个虚拟机进程。

    对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID)是一致的,使用Windows的任务管理器也可以查询到虚拟机进程的LVMID,但如过同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依赖jps命令显示主类的功能才能区分了

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

     jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。

    jps工具主要选项

    选项 作用
    -q 只输出LVMID,省略主类的名称
    -m 输出虚拟机进程启动时传递给主类main()函数的参数
    -1 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
    -v 输出虚拟机进程启动时JVM参数

    ②jstat:虚拟机统计信息监视工具

    作用:用户监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能的首选工具。

    命令格式为:jstat[ option vmid [interval[s|ms] [count] ]]

     vmid:如果是本地虚拟机进程,则和LVMID一致,如果是远程虚拟机进程,那VMID的格式应该是:[protocol:][//]lvmid[@hostname[:port]/servername]

    intervale和count代表查询间隔和次数,如果省略,说明只查询一次。

    option代表着用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况

    jinfo:java配置信息工具

    作用:实时地查看和调整虚拟机各项参数

    命令格式:jinfo[option] pid

    使用jps的-v参数可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显示指定的参数的系统默认值,使用jinfo的-flag选项进行查询,还可以使用-flag[+|-] name 修改参数

    ④jmap:java内存映像工具

    功能:用于生成堆转储快照,查询finalize执行队列,java堆和永久代的详细信息。

    命令格式:jmap [ option] vmid

    选项 作用
    -dump 生成Java堆转储快照
    -finalizerinfo 显示在F-Queue中等待Finalize执行finalize的对象,Linux/Solaris平台有效
    -heap 显示java堆详细信息,Linux/Solaris平台有效
    -histo 显示堆中对象统计信息
    -permstat 以classLoader为统计口径显示永久代内存状态,Linux/Solaris平台有效
    -F 当虚拟机进程对-dump指令没有响应,强制生成快照,Linux/Solaris平台有效

    ⑤ jhat :虚拟机堆转储快照分析工具

    功能:与jmap搭配使用,来分析jmap生成的堆转储快照

    ⑥jstack:java堆栈跟踪工具

    功能:用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的元婴

    命令格式:jstack  [option] vmid

    选项 作用
    -F 当正常输出的请求不被响应时,强制输出线程堆栈
    -l 除堆栈外,显示关于锁的附加信息
    -m 如果调用到本地方法的话,可以显示C/C++的堆栈

    在JDK1.5中,Thread类提供了一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象,使用这个方法可以完成jstack的大部分功能。

    用这个方法做一个管理员界面,可以随时随地查看线程堆栈

     1 <body>
     2     <pre>
     3     <% 
     4       for(Map.Entry<Thread,StackTraceElement[]>  stackTrace:Thread.getAllStackTraces().entrySet()){
     5         Thread thread=(Thread) stackTrace.getKey();
     6         StackTraceElement[] stack=(StackTraceElement[]) stackTrace.getValue();
     7         if(thread.equals(Thread.currentThread())){
     8          continue;
     9         }
    10         out.print("
    线程:"+thread.getName()+"
    ");
    11         for(StackTraceElement element:stack){
    12           out.print("	"+element+"
    ");
    13         
    14         }
    15       
    16       }
    17     
    18     
    19      %>
    20     </pre>
    21   </body>

    HSDIS:JIT生成代码反汇编

     

  • 相关阅读:
    vue 添加对象的新属性的方法
    vue 简单的c3属性写法
    大数据分析技术生态圈一览
    网络
    Axis2 WebService客户端Axis2调用
    前端资源
    不错的数据库
    dubbo
    大数据相关
    This is very likely to create a memory leak 异常
  • 原文地址:https://www.cnblogs.com/wxw7blog/p/7225399.html
Copyright © 2011-2022 走看看