转自:zprofiler三板斧解决cpu占用率过高问题

此工具为阿里自产的profiler工具,在其他文章中看到有用此工具进行性能问题定位的。在此转载文章学习一下。

上周五碰到了一个线上机器cpu占用率过高的问题。问题本身比较简单,但是定位过程中动用了多个zprofiler的主要功能,感觉是一个很好的介绍使用zprofiler定位此类问题流程的案例。

在开始使用zprofiler之前,先使用perf确认瓶颈点是否在native中。(以下操作需要root权限,需要pe协助操作)
如果线上服务器没有安装perf,可以到 http://yum.corp.taobao.com/taobao/6/x86_64/test/aliperf/aliperf-0.3.9-9.el6.x86_64.rpm 下载rpm包,然后安装。
使用 perf top 命令,查看当前系统的热点函数。

如上图所示的情况即表明,热点在java代码中,因为java代码是jit执行的,perf看不到其符号,所以默认归入perf-<pid>.map中。
如果热点在libjvm.so中的函数,可以联系我们团队,协助进一步分析。比如如果热点是jit相关的函数,一般是codecache或者jit相关参数的问题;如果是gc相关的函数,可以用zprofiler分析一下gclog,然后调整gc相关的参数。

排除其他可能,确定是java代码的问题之后,可以先做一个thread dump,在zprofiler上分析一下。
使用 thread dump 中的 运行态线程热点堆栈(load) 功能,就可以看到在运行线程中出现的最多的调用栈。如下图所示:

其实这里已经看到出问题的堆栈了,但是因为thread dump只是一个快照,当时没敢相信这么快就找到问题所在,所以还是觉得用Hot method Profiling看一下。

Hot Method Profiling 已经有专门的文章介绍,这里就不多说了,看圈子的置顶帖就可以了。
当时分析结果如下图:

这个结果非常明显,排第一的函数占了99%的cpu占用率。而且展开之后的调用栈跟前面在热点堆栈里面看到的调用栈一模一样。基本可以肯定问题就出在这里。

但是产品的小伙伴说这个地方是正常的调用,sql语句很久没有修改,数据库里面数据量也不大。为了一探究竟,决定做一个heap dump,看一下到底在处理什么样的数据?
做完heap dump之后,拷贝到zprofiler系统上分析。大概看了一下 "对象簇视图",没有什么特别大的对象。
然后又看了一下  “线程概览” ,可以在右边 "正则匹配" 的地方,根据线程名把相关线程过滤出来。
然后展开可以看到各层调用栈上的局部对象。如下图:

鼠标放上去,可以看到对象的内容。这里就可以看到正在查询的sql语句,以及相关的参数。

后来查出来的根本原因是有一个第三方组件没有升级导致的bug。

zprofiler工具的更多相关文章

  1. JVM:带你查看常见的问题,以及分析处方法

    一.前言 各位开发和运维同学,在项目实施落地的过程中,尤其是使用EDAS.DRDS.MQ这些java中间件时,肯定会遇到不少JAVA程序运行和JVM的问题.我结合过去遇到的各种各样的问题和实际处理经验 ...

  2. 阿里员工都是这样排查Java问题的,附工具单(转)

    平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮 ...

  3. (转载)我的java问题排查工具单

    原文地址:https://yq.aliyun.com/articles/69520 我的问题排查工具箱 前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在 ...

  4. Java问题排查工具单

    前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常 ...

  5. 我的java问题排查工具单

    前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常 ...

  6. 一份详尽的 Java 问题排查工具清单,值得收藏!

    | grep 5 -A 3    #上匹配seq 10 | grep 5 -B 3    #下匹配seq 10 | grep 5 -C 3    #上下匹配,平时用这个就妥了cat f.txt | g ...

  7. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  8. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  9. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

随机推荐

  1. Linux培训教程 linux中nl命令使用介绍

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  2. PHP培训教程 php几个不起眼儿的小技巧

    说是不起眼儿的小技巧,其实应该说是不常用的常规应用吧.很多事情就是这样,知道是一马事儿,会用是一马事儿,精习又是另外一马事儿.而成为高手更是需要扎实的基本功. str_repeat 重复输出字符串就靠 ...

  3. 多module project修改module名称

    1.mvn clean 2.project 去掉这个module 3.全局替换所有pom.xml文件的老module名为新module名 4.修改源代码文件夹目录名为新的module名 5.proje ...

  4. android stadio gradle问题

    https://www.jianshu.com/p/2bb0b6a7b479 https://www.jianshu.com/p/d175bef9770c Unable to resolve depe ...

  5. [SHOI2005]树的双中心

    题目链接:Click here Solution: 首先我们要知道,选择两个点\(A,B\),必定存在一条边,割掉这条边,两个集合分别归\(A,B\)管 再结合题目,我们就得到了一个暴力的\(n^2\ ...

  6. 苹果cms如何添加播放器预加载和缓冲广告

    1,来到系统后台>>系统>>播放器参数设置  可以看到添加预加载和缓冲广告的输入框.文件格式为html 自己写一个html的网页上传到网站进行调用即可.链接前面不要加http或 ...

  7. Oracle数据库锁表查询

    --查看数据库最大连接数 select value from v$parameter where name = 'processes'; --更改数据库连接数 alter system scope = ...

  8. Hbase数据备份&&容灾方案

    Hbase数据备份&&容灾方案 标签(空格分隔): Hbase 一.Distcp 在使用distcp命令copy hdfs文件的方式实现备份时,需要禁用备份表确保copy时该表没有数据 ...

  9. HashMap原理及简单实现

    public class MyHashMap<K, V> { private class Entry<K, V> { int hash; K key; V value; Ent ...

  10. shell脚本之结构化命令if...then...fi

    if的用法日常主要用于数值或者字符串的比较来实现结构化的,模拟人脑,就是如果遇到什么事情,我们应该做什么 语法格式分为 1. if command;then command;fi    (如果if满足 ...