"对 dubbo 的服务治理管理页面,有人查询已经上线的服务十分慢,甚至要 5,6 分钟才返回结果,但有些查询得时间比较正常。 由于是第一次接手这个项目,并不知到其中的原理,怎么实现查询的,有使用到 zk 加数据库的查询。大致判断应该是这两个耗时很长导致的。 接下来当然是开始在本地运行这个项目,beta 环境跑了 3 个 .."

记录一次使用 idea 查询 bug 的记录

对 dubbo 的服务治理管理页面,有人查询已经上线的服务十分慢,甚至要 5,6 分钟才返回结果,但有些查询得时间比较正常。
由于是第一次接手这个项目,并不知到其中的原理,怎么实现查询的,有使用到 zk 加数据库的查询。大致判断应该是这两个耗时很长导致的。
接下来当然是开始在本地运行这个项目,beta 环境跑了 3 个小时才跑起来,我的内心是崩溃的。好不容易跑起来,该怎样入手了?
首先,模拟用户的搜索,试了好几个 dubbo 接口,查询的速度都正常,好不容易找到一个时间返回很长的,开始调查。
既然使用到的是 tomcat,一般来说接口也是同步返回的,没有另开线程返回异步结果,所以找到 idea debugger 下的所有线程。使用的是 tomcat,tomcat 开的线程用户请求,都是 http-nio-{{port}}-exec-{{index}},找到其线程前缀,发现一个线程的状态一直是 RUNNING,对其右键,选择 suspend,暂停此线程。发现其卡在 io 的连接上,看到其调用栈,考到项目本身类所在的线程栈,发现是一个调用 sql 接口。
接下来就是复现了。复制其线程站传递给数据库的参数,构造相对应的语句,发现其运行了 5 分钟半才得到结果,至此原因找到了,是 sql select 出了问题,由于有些 dubbo 读物并没有手动设置 group 这时会手动指定其 group 为 dubbo,而数据库数据又很多,根据 group 查询其结果超过 100 万条(),结果十分巨大。所以十分耗时,造成结果查询很慢。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2212 引用 • 7521 回帖 • 967 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    106 引用 • 335 回帖 • 691 关注
1 回帖   
请输入回帖内容...
  • 88250

    看上去是监控方面不到位导致定位问题较为困难。如果服务器上有系统监控的话应该可以较快根据 CPU、内存定位到是数据库慢,进而根据慢查询定位到具体 SQL,然后反推到业务相关的实现代码。