美文网首页
java dump 查看线程运行情况

java dump 查看线程运行情况

作者: 花桥RHCDS | 来源:发表于2018-05-29 22:45 被阅读0次

一、指标
通常应用服务性能关注以下两方面的指标:


性能指标.jpg

下面将主要是基于CPU指标进行实验模拟分析,下面是一些命令下,cpu指标:
1、top 命令下个字段含义,参考:https://www.jianshu.com/p/078ed7895b0f
2、vmstat 命令:

vmstat-指令.png
us:用户占用CPU的百分比
sy:系统(内核和中断)占用CPU的百分比
id:CPU空闲的百分比

二、实验
1、环境:Linux 2.6.32-696.18.7.el6.x86_64
2、流程:通过Jmeter 对服务接口进行压测,模拟高并发访问,从而使CPU负载飙升。
3、接口代码:

public PlainResult<String> test() throws InterruptedException{
        Integer n =0;
        synchronized(locka){
            try{
                for(;;){
                    if(n < Integer.MAX_VALUE){
                        continue;
                    }
                    n++;
                }
            }catch (Exception e){
                log.info("报错啦");
            }
        }
        return ResultUtils.createSuccessResult("true");
    }

4、JEMET 测试:线程数=100 ,循环调用:


Jemter.jpg

三、分析
此时,用户已经感知服务非常的慢,作为开发人员需要定位问题出在哪,以下是基本步骤。
1、首先,我们不知道是哪方面出现了性能问题,因此可以先整体看下服务的性能,通过vmstat 可以获取:


整机性能.png

从上图可以看出,内存、io等无性能瓶颈,但是CPU指标us(用户占用CPU的百分比)非常高,几乎接近100,id(CPU空闲的百分比)-->0,但是sy不高,另外in(系统中断)和cs(上下文切换)的数值非常高,这里可以猜测是用户应用中有大量的线程切换。

2、jps -l 查看有哪些Java进程:


Java 进程.png

可以看到,服务器上只有一个应用服务,其进程pid=24244

3、此时可用top命令可以查看具体信息:


image.png

从上图中可以看到,进程pid=24244一直cpu占用很高,基本可以定位到是该应用出现了性能瓶颈问题。

4、jstack -l 24244 > /data/logs/retail-scrm/test/24244.log dump出该进程下所有线程的堆栈信息.

5、使用 top -H -p 24244 进一步找出高占用CPU的线程:


image.png

从图中可以看出线程为30654 的一直占用着资源。

6、printf "%x" 30654 输出对应16进制的线程号:77be:


image.png

7、进入24244.log 找到对应线程的堆栈信息:


image.png

可以看到在该方法中,获取了一个Object对象锁(private static Object locka = new Object();),而大量的其他线程则被阻塞等待锁的释放。


image.png

在找到应用中对应的代码,分析其合理性即可。

以上是简单的模拟线上可能出现的性能问题:主要是通过常用命令查看服务器相关指标,并通过dump进程相关堆栈信息来定位应用中可能出现性能问题的节点。文章有不对之处,诚邀斧正,你的批评是我前进的最大动力!

相关文章

  • java dump 查看线程运行情况

    一、指标通常应用服务性能关注以下两方面的指标: 下面将主要是基于CPU指标进行实验模拟分析,下面是一些命令下,cp...

  • 一次线上内存溢出排查流程

    1、查看Java进程号 2、查看线程信息 3、存储进程信息 4、查看内存信息 5、dump内存信息到heap.bi...

  • Jvm dump介绍与使用(内存与线程)

    很多情况下,都会出现dump这个字眼,java虚拟机jvm中也不例外,其中主要包括内存dump、线程dump。 当...

  • 3、并发编程-Java线程

    并发编程 Java线程 创建和运行线程 查看线程 线程API 线程状态 创建和运行线程 方法一,直接使用new T...

  • Java问题排查-CPU飙高

    方法一 命令行工具 查看哪些Java进程在运行 查看具体进程线程占用情况,(shift+p 按cpu排序,shif...

  • 线程dump分析并发死锁

    死锁代码: 运行上述代码,然后在cmd窗口dump线程先查看进程对应的pid,通过 ### jps -l 可以看到...

  • JVM回顾(二)

    查看JAVA堆使用情况jmap 1、查看JVM指定进程的堆内存概要 jmap -heap pid 2、dump 对...

  • 05_内存溢出_分析

    什么是堆Dump 堆Dump是反应Java堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dum...

  • 内存溢出

    服务器内存直接升高首先确认排查问题的思路: 查看日志 查看CPU情况 查看TCP情况 查看java线程,jstac...

  • jvm常用命令

    查看进程堆内存使用情况 线程信息 观察进程运行环境参数,包括Java System属性和JVM命令行参数,jinf...

网友评论

      本文标题:java dump 查看线程运行情况

      本文链接:https://www.haomeiwen.com/subject/qregjftx.html