DDM的成熟在一个细微之处的体现
前言
我们都知道DDM是华为云的非常优秀的分布式数据库中间件,在性能、易用性等方面在业界是遥遥领先的。他的成熟不仅仅体现在具有快速水平平滑扩容,支持多种分布式事物类型等等这些高大上的特性上,也体现在DDM诸多的细微之处,今天我和大家分享一个在发展多年的mycat上存在,但是在DDM中不存在的一个不起眼的细微问题(小问题,大灾难,在IT行业的历史上不断重演,我们要警钟长鸣)。这个问题是我在DDM上玩了好多sql之后,发现DDM是一个玩不死的小强,出于好奇也把一些在DDM上玩的sql放到了mycat上,不幸的是,第一条sql放到了mycat上执行之后,就出现了神奇一幕,下面看看我的排查过程吧。
排查过程
首先,我的测试代码如下,我的sql除了加了一段注释之外,好像再普通不过了。但是一执行发现好像是卡主了。

于是赶紧使用jstack查看测试应用的线程栈信息,如下:

由上图不难发现是卡在测试代码TestJDBC的25行上,也就是卡在了“ps.executeQuery()”这行代码上。当然也发现最终是卡在和mycat的通信上。那么为啥mycat一直没有返回结果呢。我马上到部署mycat的测试机上,查看日志,没有发现异常信息。于是顺手看了一下测试机器的资源使用情况,果然有意外发现,如下:

发现有一个java进程的cpu使用率非常高,在这里,他肯定是mycat进程,因为在这个机器上,我只部署了mycat这一个java应用。不禁要问,mycat到底在干啥,是哪一个线程出现了问题。于是我执行了一下这样的一条命令:ps -mp 3403 -o THREAD,tid,time,想去看个究竟,命令中的3403是mycat进程的id,于是我发现了下图的信息。

发现3403进程中的线程3420消耗了非常高的CPU,接下来不难想到的是使用jstack命令去调出该mycat进程的线程栈信息,在执行jstack之前,我们先将线程id(nid) 3420转成16进制的数字,因为在jstack中看到的nid(native thread id)是16进制显示的,转换方式如下:

那好,让我们来看一下mycat进程的该线程的栈快照吧,如下:

原来问题出在了DruidMycatRouteStrategy这个类的724行,于是看一下mycat的源码,如下:

看到代码之后,是不是恍然大悟呢,问题就出在这个while循环的处理逻辑上。当然这个bug的fix也不复杂。对该问题解决方式有兴趣的朋友可以在该文章下留言,我们可以交流一下。
结语
通过上面这样的一个问题,我们不难发现,现在业界的分布式数据库中间件在大的特性上基本都能做到对齐,那么为什么华为云分布式数据库中间件DDM作为后起之秀,显得更加成熟,给用户留下了更好的印象呢?我想可能跟DDM在诸如此类的非常多的细微之处做的非常到位也有原因吧。
DDM的成熟在一个细微之处的体现的更多相关文章
- 【原创】公司各个阶段 CTO 需要做什么?(下篇)
假设一个公司发展有以下几个阶段: 0 :创始阶段: 0.5 :有产品但无管理阶段: 1 :经过 1年的发展初步稳定的阶段: 1+ :稳步发展阶段. 上一篇文章中,我们聊了公司在初创阶段,CTO 需要做 ...
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- iOS关于模块化开发解决方案(纯干货)
关于iOS模块化开发解决方案网上也有一些介绍,但真正落实在在具体的实例却很少看到,计划编写系统文章来介绍关于我对模块化解决方案的理解,里面会有包含到一些关于解耦.路由.封装.私有Pod管理等内容:并编 ...
- jquery工具方法access详解
access : 多功能值操作(内部) access方法可以使set/get方法在一个函数中体现.比如我们常用的css,attr都是调用了access方法. css的使用方法: $(selector) ...
- 在线最优化求解(Online Optimization)之五:FTRL
在线最优化求解(Online Optimization)之五:FTRL 在上一篇博文中中我们从原理上定性比较了L1-FOBOS和L1-RDA在稀疏性上的表现.有实验证明,L1-FOBOS这一类基于梯度 ...
- MySQL对于datetime 源码分析
http://tsecer.blog.163.com/blog/static/150181720160117355684/ 一.时间比较的语法分析 在mysql中,通常时间是一个必不可少的类型,而 ...
- DOS环境下MySQL使用及不同字符集之间的转换
mysql -uroot -p; show databses; 创建数据库\c; create database webclass; use webclass; 创建表并设置好各字段的属性\c cre ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block 到目前为止,我们使用的模块都是在同一个配置 ...
- 主成分分析(PCA)原理及推导
原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...
随机推荐
- Django考试系统(1)
好久没更过博客了,菜是原罪.毕业设计快做完了,第一次独立做的项目(考试系统),自己摸索着做的,以前学习的好多东西都用上了,但是也都忘了,完成设计的途中又一步步的捡起来了(不知道现在还记没记得).最近着 ...
- 如何用纯 CSS 创作一种按钮被瞄准的交互特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/ELWMLr 可交互视频教程 此视 ...
- POJ 1287 Networking (最小生成树模板题)
Description You are assigned to design network connections between certain points in a wide area. Yo ...
- linux 配置文件要不要加上#! /bin/bash
现在一般的linux系统默认的shell都是bash.所以但很多unix系统可能会用bourne shell.csh或者ksh等来作为用户默认shell 如果你在写shell脚本的时候,用的语法只有b ...
- CentOS 7中设置PHP7的Log文件日志
对于服务器上面运行的php代码, 想要去查看对应的log,找到代码无法运行的原因 1.通过:phpinfo()去找 error_log 结果得到: 2.然后去编辑php.ini,修改三处地方 vi / ...
- CU论坛常用知识点汇总
1.正则表达式详解 http://bbs.chinaunix.net/thread-63273-1-1.html http://bbs.chinaunix.net/thread-605570-1-1. ...
- BeautifulSoup实例
Beautiful Soup 4.4.0 中文文档:http://beautifulsoup.readthedocs.io/zh_CN/latest/ #coding:utf-8from bs4 im ...
- mybatis插件 mybatis插件-------从dao快速定位到mapper的sql语句
步骤一:打开settings,点击plugins 快捷键ctrl+alt+s打开settings 步骤二.点击ClearCase Integration,并点击下面中间的按钮(browse repos ...
- zoj 2001 Adding Reversed Numbers
Adding Reversed Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB The Antique Comedians of M ...
- 按Esc按钮关闭layer弹窗
//按Esc关闭弹出框 $(document).ready(function () { }).keydown( function (e) { if (e.which === 27) { layer. ...