前言

很多时候我们需要知道更多的程序的运行细节,但又不可能在开发的时候就把程序中所有的运行细节都打印到日志上,通常这个时候能采取的就是修改代码,重新部署,然后再观察,但这种方法对于online应用来说不是很好,另外一方面如果碰到不好改的代码,例如引用的其他的外部的包什么的,就很麻烦了,BTrace就是一个可以在不改代码、不重启应用的情况下,动态的查看程序运行细节的工具,下面这篇文章就介绍了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塞了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# btrace使用
# btrace
# 教程
# java
# 这篇文章
# 很好
# 是因为
# 而在
# 其他的
# 能在
# 朋友们
# 就把
# 然后再
# 这个时候
# 但这
# 种方法
# 但又
# 重启
# 不改
# 很慢
# 很麻烦
# 塞了
# 情况下
# 塞住
相关文章:
如何在橙子建站中快速调整背景颜色?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何通过wdcp面板快速创建网站?
开源网站制作软件,开源网站什么意思?
制作电商网页,电商供应链怎么做?
如何在建站主机中优化服务器配置?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
深圳网站制作案例,网页的相关名词有哪些?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
C#怎么创建控制台应用 C# Console App项目创建方法
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何在IIS服务器上快速部署高效网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何在景安云服务器上绑定域名并配置虚拟主机?
C#如何在一个XML文件中查找并替换文本内容
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站OpenVZ教程与优化策略:配置指南与性能提升
建站主机空间推荐 高性价比配置与快速部署方案解析
招商网站制作流程,网站招商广告语?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何在云主机上快速搭建网站?
建站之星如何实现五合一智能建站与营销推广?
制作网站的公司有哪些,做一个公司网站要多少钱?
Android自定义listview布局实现上拉加载下拉刷新功能
昆明网站制作哪家好,昆明公租房申请网上登录入口?
一键网站制作软件,义乌购一件代发流程?
Swift开发中switch语句值绑定模式
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
建站主机如何选?性能与价格怎样平衡?
智能起名网站制作软件有哪些,制作logo的软件?
建站主机服务器选型指南与性能优化方案解析
如何在建站宝盒中设置产品搜索功能?
广平建站公司哪家专业可靠?如何选择?
黑客如何通过漏洞一步步攻陷网站服务器?
c++怎么用jemalloc c++替换默认内存分配器【性能】
相册网站制作软件,图片上的网址怎么复制?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
南京网站制作费用,南京远驱官方网站?
如何在建站之星绑定自定义域名?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Android使用GridView实现日历的简单功能
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
建站之星安全性能如何?防护体系能否抵御黑客入侵?
*请认真填写需求信息,我们会在24小时内与您取得联系。