• JVM运行观察常用命令梳理


    Linux top命令

    观察当前进程占用的CPU/内存比例等运行状态,
    top -Hp 观察进程中的线程,哪个线程CPU和内存占比高

    PID:进程ID,进程的唯一标识符
    USER:进程所有者的实际用户名。
    PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
    NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
    VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
    S:这个是进程的状态。它有以下不同的值:
      1.D - 不可中断的睡眠态。
      2.R – 运行态
      3.S – 睡眠态
      4.T – 被跟踪或已停止
      5.Z – 僵尸态
    %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
    %MEM:进程使用的可用物理内存百分比。
    TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
    COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

    java jps(Java Virtual Machine Process Status Tool)

    java提供的可以查看当前的java进程

    jstack

    Jdk自带的线程跟踪工具,用于打印指定Java进程的线程堆栈信息。

    JDK jstack  -l  [pid] 
    

    定位线程状况,重点关注:WAITING BLOCKED

    线程状态
    NEW :未启动的。不会出现在Dump中。
    RUNNABLE :在虚拟机内执行的。运行中状态,可能里面还能看到locked字样,表明它获得了某把锁。
    BLOCKED :受阻塞并等待监视器锁。被某个锁(synchronizers)給block住了。
    WATING :无限期等待另一个线程执行特定操作。等待某个condition或monitor发生,一般停留在park(), wait(), sleep(),join() 等语句里。
    TIMED_WATING :有时限的等待另一个线程的特定操作。和WAITING的区别是wait() 等语句加上了时间限制 wait(timeout)。
    TERMINATED :已退出的。

    jinfo (Java Configuration Info)

    jinfo -flag <name> PID
    

    查看和调整JVM配置参数

    标记为manageable的Flags

    Linux环境:java -XX:+PrintFlagsInitial | grep manageable
    Window环境:java -XX:+PrintFlagsInitial | findstr manageable

    Linux jstat -gc

    jstat -gc pid time
    

    每time秒会显示一次进程号为pid的java进程的GC情况

    java jmap

    jmap - histo pid
    jmap - histo pid |  head -20
    

    查找有多少对象产生

    相关参数:
    -dump : 生成Java堆转储快照
    -heap:显示Java堆详细信息
    -histo:显示堆中对象统计信息

    jmap -heap pid
    

    显示堆栈信息

    jmap -dump:format=b,file=jsconsole.bin pid
    

    生成快照文件

    快照文件利于排查线上问题,但是该命令执行期间会对进程产生很大影响。
    可以设置参数-XX:+HeapDumpOnOutOfMemoryError,OOM的时候会自动产生堆转储文件
    可参考:https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html

  • 相关阅读:
    有效获取状态栏(StatusBar)高度
    各种数据库连接
    Spring AOP 原理
    Spring ioc 原理
    转载的别人的ajax跨域解决方法
    如何监听input的脚本赋值
    JAVA之Socket编程
    JAVA中的多线程
    JAVA文件操作
    实验三 kali下metasploit的漏洞攻击实践
  • 原文地址:https://www.cnblogs.com/farmersun/p/12446209.html
Copyright © 2020-2023  润新知