• JVM常用排查命令


    top命令

    top命令是我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。

    vmstat命令

    vmstat是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还有一个重要的常用功能,用来观察进程的上下文切换。字段说明如下:

    r: 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程)

    b: 等待IO的进程数量

    • swpd: 使用虚拟内存大小
    • free: 空闲物理内存大小
    • buff: 用作缓冲的内存大小(内存和硬盘的缓冲区)
    • cache: 用作缓存的内存大小(CPU和内存之间的缓冲区)
    • si: 每秒从交换区写到内存的大小,由磁盘调入内存
    • so: 每秒写入交换区的内存大小,由内存调入磁盘
    • bi: 每秒读取的块数
    • bo: 每秒写入的块数
    • in: 每秒中断数,包括时钟中断。
    • cs: 每秒上下文切换数。
    • us: 用户进程执行时间百分比(user time)
    • sy:内核系统进程执行时间百分比(system time)
    • wa: IO等待时间百分比
    • id: 空闲时间百分比

    pidstat命令

    pidstat 是 Sysstat 中的一个组件,也是一款功能强大的性能监测工具,top 和 vmstat 两个命令都是监测进程的内存、CPU 以及 I/O 使用情况,而 pidstat 命令可以检测到线程级别的。pidstat命令线程切换字段说明如下:

    UID :被监控任务的真实用户ID。

    TGID :线程组ID。

    TID:线程ID。

    cswch/s:主动切换上下文次数,这里是因为资源阻塞而切换线程,比如锁等待等情况。

    nvcswch/s:被动切换上下文次数,这里指CPU调度切换了线程。

    jps:JVM Process Status Tool

    显示指定系统内所有的HotSpot虚拟机进程。

    jps [options] [hostid]
    
    • 1

    -l : 输出主类全名或jar路径

    -q : 只输出LVMID

    -m : 输出JVM启动时传递给main()的参数

    -v : 输出JVM启动时显示指定的JVM参数

    jstat:JVM statistics Monitoring

    是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。常用
    
    • 1

    jstat [option] LVMID [interval] [count]

    [option] : 操作参数

    LVMID : 本地虚拟机进程ID
    
    [interval] : 连续输出的时间间隔
    
    [count] : 连续输出的次数
    
    -printcompilation hotspot编译方法统计
    
    -gcpermcapacity 永生代行为统计
    
    -gcoldcapacity 统计旧生代的大小和空间
    
    -gcold 统计旧生代的行为
    
    -gcnewcapacity 新生代与其相应的内存空间的统计
    
    -gccause 垃圾收集统计概述(同-gcutil)
    
    -gcutil 同-gc,不过输出的是已使用空间占总空间的百分比 --使用最多的,下面是显示时每个标题的作用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • S0C : survivor0区的总容量
    • S1C : survivor1区的总容量
    • S0U : survivor0区已使用的容量
    • S1C : survivor1区已使用的容量
    • EC : Eden区的总容量
    • EU : Eden区已使用的容量
    • OC : Old区的总容量
    • OU : Old区已使用的容量
    • PC 当前perm的容量 (KB)
    • PU perm的使用 (KB)
    • YGC : 新生代垃圾回收次数
    • YGCT : 新生代垃圾回收时间
    • FGC : 老年代垃圾回收次数
    • FGCT : 老年代垃圾回收时间
    • GCT : 垃圾回收总消耗时间
      使用jstat -gc pid 1000命令来对gc分代变化情况进行观察,1000表示采样间隔(ms).

    jmap–jmap(JVM Memory Map)

    命令用于生成heap dump文件,如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

    常用命令为:jmap -heap pid
    
    jmap [option] LVMID
    
    • 1
    • 2
    • 3

    dump : 生成堆转储快照

    finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象

    heap : 显示Java堆详细信息

    histo : 显示堆中对象的统计信息

    permstat : to print permanent generation statistics

    F : 当-dump没有响应时,强制生成dump快照

    可以使用jmap -heap pid 命令查询到新生代的Eden区大小,S0和S1区的大小(用来排查YGC的问题)。
    
    • 1

    jhat:JVM Heap Analysis Tool

    命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。
    想要了解更多技术文章请关注公众号“职谷智享”,每天关注的前50名小伙伴可领取200+互联网相关技术书籍。

    个人公众号

  • 相关阅读:
    界面控件Telerik UI for WPF中文教程 - 用RadSvgImage升级应用程序UI
    FastDFS文件上传
    Selenium自动化测试框架
    【Leetcode刷题(数据结构)】:三路划分与三数随机取中的思想实现快速排序的再优化
    java计算机毕业设计合同管理源码+mysql数据库+系统+lw文档+部署
    softmax的高效CUDA编程和oneflow实现初步解析
    代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
    docker的使用
    新书推荐:11.6 调用约定
    SpringBoot工程中Dubbo多协议使用方式
  • 原文地址:https://blog.csdn.net/u013533380/article/details/136455923