• 线上服务排查命令汇总


    1、jps

    jps主要用来输出JVM中运行的进程状态信息。常用参数命令:

    jps -v
    -v 输出传入JVM的参数
    使用这个命令我们可以很轻松的查看相应服务的启动参数与配置。

    2、jstack

    jstack -l pid  |  jstack -m pid
    #-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
    #-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

    实际案例:

      找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有:ps、top、printf、jstack、grep。假设我部署在服务器上的 java 应用名称为 searchrank。

     1、找出对应服务 java 进程 pid = 76137

    jps -v | grep searchrank

     2、找出该进程内最耗费CPU的线程,可以使用命令:

    top -Hp 7613

      进入 top 命令界面中,根据标题提示例如:CPU、MEM、TIME,可以使用组合键:Shift + C/M/T 来指定按照各个维度进行倒排。

      这里我就是通过组合键:Shift + T 将结果按照 使用 CPU 耗时最长 倒排。

      

      3、得到对应线程 id 对应的十六进制值

    printf "%x
    " 76404

      最终得到的值为:12a74

     4、轮到 jstack 上场了,用来输出对应线程堆栈信息

    jstack 7613 | grep 12a74

      从这里就可以看到 CPU 消耗的具体原因是什么了,它可以精确到对应源码行数,非常有用。

    3、jmap 和 jhat

      jmap用来查看堆内存使用状况,一般结合jhat使用。jmap 常用命令如下:

    jmap -heap pid
    jmap -histo[:live] pid
    jmap -dump:format=b,file=dumpFileName pid

      1. 使用 jmap -heap pid 查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。

      2. 使用 jmap -histo[:live] pid 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象。

      3. jmap -dump:format=b,file=/tmp/dump.dat pid 用 jmap 把进程内存使用情况 dump 到文件中,再用 jhat 分析查看。

      dump 出来的文件可以用 MAT、VisualVM 等工具查看,这里用 jhat 查看:

    jhat -port 9998 /tmp/dump.dat
    #注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存
    jhat -J-Xmx512m -port 9998 /tmp/dump.dat

      然后就可以在浏览器中输入主机地址:9998查看了:

      

    4、jstat

      JVM统计监测工具,使用 -gc 打印出内存详情

    # 指定 pid 输出对应 gc 信息,每 250ms 打印,一共打印 4 次
    jstat -gc 21711 250 4

     现在来解释各列含义:

    EC、EU:Eden区容量 和 使用量
    OC、OU:年老代容量 和 使用量
    PC、PU:永久代容量 和 使用量
    YGC、YGT:年轻代GC次数 和 GC耗时
    FGC、FGCT:Full GC次数 和 Full GC耗时
    GCT:GC总耗时

     使用 -gcutil 会只列出对应空间占比 = 使用量/分配总量

    jstat -gcutil 21711 250 4

    解释一下上图中各个标题项中的含义:

    S0: 新生代中Survivor space 0区已使用空间的百分比
    S1: 新生代中Survivor space 1区已使用空间的百分比
    E: 新生代已使用空间的百分比
    O: 老年代已使用空间的百分比
    P: 永久带已使用空间的百分比
  • 相关阅读:
    iOS使用Charles(青花瓷)抓包并篡改返回数据图文详解(转)
    iOS 9 添加白名单
    iOS 中字体的应用(转)
    iOS 后台操作的开发(转)
    iOS 知识点大总结(转)
    在Xcode中找中文字符串(正则表达式)
    block 使用时的注意点(转)
    xcode armv6 armv7 armv7s arm64 (转)
    使用Android studio过程中发现的几个解决R变红的办法
    折腾了一晚上的“equals”和“==”
  • 原文地址:https://www.cnblogs.com/liang1101/p/13753915.html
Copyright © 2020-2023  润新知