其他分享
首页 > 其他分享> > JVM常用命令

JVM常用命令

作者:互联网

  在JVM实战之前先了解几个常用于JVM性能分析的命令:

    以下命令都可以通过man查看具体使用方法,本文只是简单概况,示例案例如下:

    

  一、jps

    jps 是(java process Status Tool), Java版的ps命令,查看java进程及其相关的信息,如果你想找到一个java进程的pid,那可以用jps命令替代linux中的ps命令了,简单而方便。
    命令格式:
      jps [options] [hostid]
      options参数解释:
        -l : 显示进程id,显示主类全名或jar路径
        -q : 显示进程id
        -m : 显示进程id, 显示JVM启动时传递给main()的参数
        -v : 显示进程id,显示JVM启动时显示指定的JVM参数
        hostid : 主机或其他服务器ip
    最常用示例:
      jps -l 输出jar包路径,类全名
      jps -m 输出main参数
      jps -v 输出JVM参数

    

    jps命令显示ThreadState的进程id是2859。根据ps命令看看是否一致:

    

  二、jstack

    jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。具体快照信息包含内容,实践如下:

    

    

     通过上例可知,默认输出线程状态等信息。

    获取更多信息,可以通过添加参数选项:

      -F 当使用jstack 无响应时,强制输出线程堆栈。
      -m 同时输出java堆栈和c/c++堆栈信息(混合模式)
      -l 除了输出堆栈信息外,还显示关于锁的附加信息

    jstack一个很大的功能在于定位定位线程出现长时间卡顿的原因,例如死锁,死循环等。下面示例演示定位(win10,非CentOS,命令一样):

      

     此处通过jps获得java进程号,再通过jstack定位。在实际生产中,不可能直接就知道是这个进程号对应的代码段有问题,对于cpu占用过高问题通过jstack与其他工具综合使用可以定位到问题代码,具体如下:

      1.使用Process Explorer工具找到cpu占用率较高的线程
      2.在thread卡中找到cpu占用高的线程id
      3.线程id转换成16进制
      4.使用jstack -l 查看进程的线程快照
      5.线程快照中找到指定线程,并分析代码

  三、jinfo

  四、jstat

  五、jmap

  六、jhat

 

  未完,待续……

标签:jstack,命令,线程,JVM,常用命令,jps,id
来源: https://www.cnblogs.com/ilovebath/p/15367824.html