Java中的常见排查问题命令

一、线上服务排查,从三个方面负载、cpu、内存 这三个方面着手

1:top 命令是比较常见的,也是最常用的,因为他显示的信息也是最全的

2:针对负载的问题,我们怎么能确定负载当前是高还是低?

    一般来说只要负载超过0.7可能就表示当前负载有点高了,需要排查一下,这个是针对单核CPU来说的,如果是多核CPU来说,我们就是CPU核数乘以0.7来计算的。
    在top显示的进程信息的时候,我们可能看到当前进程中 7704这个进程 占用CPU最高,而且是我们的Java进程


3:top -Hp 是查看当前进程中的所有的线程情况,同样的可以看到 9046 这个线程占用比较高,那么我们再接着分析这个线程在处理什么逻辑就可以了

4:使用printf命令查看这个线程的16进制

5:最后使用jstack命令查看当前线程正在执行的什么方法,再或者我们直接使用 jmap 来dump内存

6:free来查看内存数据,是保证我们程序能正常运行的关键,这个也是需要我们查看的一个关键指标数据

    A: Mem行,顾名思义也就是展示内存的使用情况

          a:  total:表示物理内存总大小
          b:  used:已经被使用的物理内存和交换空间
          c:  free:表示未被分配的内存
          d:  shared:共享使用的物理内存大小
          e:  buff/cache buffer 和 cache 使用的物理内存大小
          f:  available:当前剩余实际可用内存(还可以被应用程序使用的物理内存大小)

 7: vmstat命令用于查看CPU使用情况

         a: us:用户进程执行时间百分比(如果当前值比较高,说明用户进程消耗高)
         b: sy:内核系统进程执行时间百分比(如果系统比较高,那么你可以找运维了)
         c: id:空闲时间百分比
         d: wa:IO等待时间百分比(如果IO时间长,那说明机器在大量的处理磁盘的读写操作,这个也是关注的重点,可能写日志啊等都有可能)
         e: st:虚拟 CPU 等待实际 CPU 的时间的百分比

二、将内存使用情况加载到dump文件中

           方法一:
                jmap -dump:format=b,file=dumpFileName <pid>

               #示例
               jmap -dump:format=b,file=/tmp/dump.dat 6219

      ![](https://img2020.cnblogs.com/blog/2032084/202111/2032084-20211105230757990-608498056.png)


           方法二:Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态

                A:安装一下Arthas:$curl -O https://arthas.aliyun.com/arthas-boot.jar

                B: 启动Arthas前,必须先要启动所要监控的服务

                C:生成dump文件并到指定到相关位置上

三、解析dump文件,可以使用 MAT、Jprofiler等

posted @ 2021-11-05 21:31  jock_javaEE  阅读(198)  评论(0编辑  收藏  举报