btrace定位生产故障

现象

某些请求通过数据访问层很慢并导致处理线程阻塞,从监控中未能检查到异常。

编写btrace脚本

@BTrace
public class DBProxyTrace {

    @OnMethod(clazz = "xxx.xxx.QueryHandler", method = "query",
            location = @Location(Kind.RETURN))
    public static void trace2(String sql, @Duration long duration) {
        if (duration/1000000 > 10 * 1000) {
            com.sun.btrace.BTraceUtils.println(duration/1000000 + "ms");
            com.sun.btrace.BTraceUtils.println("this task executes more than 10s. the sql is : "
                    + sql);
            com.sun.btrace.BTraceUtils.println("jstack is : ");
            com.sun.btrace.BTraceUtils.jstack();
        }
    }
}

判断执行大于10秒的sql和堆栈信息。

编译脚本DBProxyTrace.java,确认脚本没有问题。

./bin/btracec  -cp build/ java/DBProxyTrace.java

执行脚本DBProxyTrace.class

./bin/btrace -cp build/ 17342  DBProxyTrace.class

信息

10468ms
this task executes more than 10s. the sql is : rollback
jstack is :
xxx.QueryHandler.query(QueryHandler.java:106)
xxx.net.AbstractConnection.onReadData(AbstractConnection.java:245)
xxx.net.NIOReactor$RW.run(NIOReactor.java:77)
java.lang.Thread.run(Thread.java:745)

定位

阻塞在事务回滚。

使用jstack进一步定位。

打印JVM堆栈

"$_NIOREACTOR-7-RW" prio=10 tid=0x00007f069856f000 nid=0xde1 waiting for monitor entry [0x00007f0677011000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
    - waiting to lock <0x000000068086fbc0> (a oracle.jdbc.driver.T4CConnection)

结论

阻塞在了oracle驱动rollback动作,这里其实是因为oracle驱动为了保证串行请求响应而在底层加了锁,而这个通道被慢语句塞住了,所以rollback塞了。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

时间: 2024-09-04 10:47:46

btrace定位生产故障的相关文章

Java在线问题排查利器之Btrace&amp;Greys

1. 背景说明 前段时间升级了urs新的远程cookie校验模式.功能上线后,发现涉及用户cookie 校验的接口,有时会报接口超时.通过日志埋点方式,确认了与urs提供的jar包内的新验证方法有关.通过反编译,看到相关方法执行过程中涉及参数校验.参数组装.远程访问校验.本地校验等步骤,究竟哪个步骤出了问题? 一种方式是让urs帮忙提供一个新的jar包,在关键步骤处加日志,记录执行时间,另一种方法,就是使用一些在线分析工具.显然第二种方式更方便快捷.本文主要介绍两款在线问题排的工具:Btrace

Btrace入门到熟练小工完全指南

  BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码,加入System.out.println(), 然后重启,然后重启,然后重启应用!!! 同时,特别严格的约束,保证自己的消耗特别小,只要定义脚本时不作大死,直接在生产环境打开也没影响. 在网上搜索BTrace出来的文章都有点旧了,而且不够详细,于是决定,重新写一份. 码这么多的字好辛苦,请保留原

海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人\圈人)

标签 PostgreSQL , PostGIS , 空间数据 , 空间索引 , 寻人启事 , 位置寻人 , 公益系统 , 实时定位 , 海量圈人 背景 老人.儿童是最容易走丢的人群,一定要看好老人和小孩,但是万一走丢了怎么办呢? 阿里有一个公益系统,团圆,这个系统是用来帮助发布走丢人群信息的,公安通过发布的走丢人的照片,最后一次的位置信息,向社会发布. 通过公益平台的合作伙伴(例如运营商.购物软件等)可以向最后一次走丢人士出现的位置附近的人推送寻人启事,调动社会力量帮助寻找丢失人. 为了实现这个

快速定位windows8收藏夹位置的技巧

  在使用IE浏览器时,一般保存网站网址都会存储在默认的收藏夹里,以便轻松访问.在windows其他系统下,用户都能很快地找到收藏夹的位置,但是在新系统windows8下,由于改变了全新的风格,一时之下,用户很难找到收藏夹位置,下面就教大家一个小方法,快速定位windows8收藏夹位置. 1.按"Win键"+"E"进入"计算机",双击打开系统盘"C盘" 2.找到"用户"文件夹(某些系统会显示为"U

Win7系统提示“无法定位动态链接库user32.dll”的解决方法

user32.dll是Windows用户界面相关应用程序接口,用于Windows处理,基本用户界面等特性,比如创建窗口和发送消息等,有用户反馈在win7系统上运行某软件的过程中,出现提示无法定位程序输入点dwmhintdxupdate于动态链接库user32.dll上,导致这个软件无法使用,下载重装也没用,不知该如何解决了?针对此问题,下面小编整理了解决方法,给大家介绍Win7纯净版64位系统运行软件提示无法定位动态链接库user32.dll的解决方法. 操作方法: 1.首先重新启动或注销win

PgSQL · 应用案例 · 海量用户实时定位和圈人-团圆社会公益系统

背景 老人.儿童是最容易走丢的人群,一定要看好老人和小孩,但是万一走丢了怎么办呢? 阿里有一个公益系统,团圆,这个系统是用来帮助发布走丢人群信息的,公安通过发布的走丢人的照片,最后一次的位置信息,向社会发布. 通过公益平台的合作伙伴(例如运营商.购物软件等)可以向最后一次走丢人士出现的位置附近的人推送寻人启事,调动社会力量帮助寻找丢失人. 为了实现这个目的,需要收集社会人士的实时位置,现在有很多技术可以实现,例如手机基站定位.GPS定位等. 假设有10亿手机用户,用户的位置实时变动,实时的位置信

U盘装WIN7安装程序无法定位现有分区,也无法创建新的系统分区(转载)

  我最近装WIN7,格了盘之后,总是出现提示"安装程序无法定位现有分区,也无法创建新的系统分区",想了很多办法,总是无法解决,后来经过多方查找,于昨天晚上终于把系统装上了.     我用U盘装系统,是因为我的光驱读盘不好,有时读不出来,有时又能读出来,所以才想到用U盘来装系统.当然了,你的电脑得支持U盘启动才行,下面开始说处理过程,网上能搜到很多的.现在我把我的处理过程总结如下:     1.首先,准备一个3G以上的U盘,因为WIN7的系统安装包有2.8G,U盘制作成PE启动盘后,会

jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习

程序员都很赖,你懂的! 最近在做html5页面的开发,主要做智能终端设备的开发.对于内容比较少的页面,领导提出了要将页眉和页脚定位到网页的最上方和最下方.对于这样的要求,其实一点也不过分.但对于新手来说,确实很难,很不容易,今天我就将我学习的内容一起分享一下!放置页眉和页脚的方式有三种:     Inline - 默认.页眉和页脚与页面内容位于行内.     Fixed - 页面和页脚会留在页面顶部和底部.     Fullscreen - 与 fixed 类似;页面和页脚会留在页面顶部和底部请

sql server-移植SqlServer2008R2到oralce 11g出现源插件无法定位错误

问题描述 移植SqlServer2008R2到oralce 11g出现源插件无法定位错误 10C 使用Oracle Developer 做移植出现错误如上图,有没有大神知道怎么解决啊?试了好多天了 解决方案 这是没法移植的啊.比如MapPoint插件,只能在SQL Server中用,怎么可能移植到Oracle 中.移植前没做可行性分析吗?