关于mysql:第25问MySQL-崩溃了打印了一些堆栈信息怎么读

52次阅读

共计 713 个字符,预计需要花费 2 分钟才能阅读完成。

问题

在 09 问中,咱们开启了 coredump 性能,在 MySQL 解体时取得了有用的 coredump 信息。

那如果没开启 coredump,仅有 error log 中的堆栈信息,咱们如何剖析无效的信息?

试验

咱们沿用 09 问中的 MySQL 解体的场景,此处疏忽复现解体的步骤,大家参看 09 问查看 error log:

咱们拿到了解体地位 0xee36f1,如何找到与之绝对的代码地位呢?找台测试机,获取对应版本的安装包:

解压:

而后用 GDB 关上 mysqld:

在 0xee36f1 地位打一个断点:

咱们能够看到,gdb 将解体地位的文件名和行号都打印进去,剩下的事件,就能够交给开发工程师,依照这个解体堆栈来进行问题排查。

赠送章节

红框内的这串信息是什么?咱们来解开看一下,这段信息分为两段,”+0x71″ 是一个偏移量,后面是一串文字,咱们将文字解析进去:

能够看到后面这串文字是一个函数签名的编码,用 c++filt 还原编码当前,能够看到残缺的函数签名。红框内的这串信息的意思就是解体地位是 一个函数起始地位 + 偏移量。咱们大略能够猜到,这个 MySQL 的缺点是在为 binlog 产生新的文件名时产生的。

小贴士:
函数起始地位 + 偏移量 是一种内存地位的示意办法,但该地位不肯定是这个函数内的代码。
以本例来说,0xee36f1 这个地位,程序找到了就近的函数 generate_new_name 的起始地位,计算出有 0x71 这么多偏移,就示意成了 generate_new_name+0x71 这种模式。
但 0xee36f1 这个地位的代码,大概率是,但,不肯定是 generate_new_name 这个函数外部的一段代码。


对于 MySQL 的技术内容,你们还有什么想晓得的吗?连忙留言通知小编吧!

正文完
 0