GreatSQL 启动崩溃:jemalloc 依赖缺失问题排查
GreatSQL 启动崩溃:jemalloc 依赖缺失问题排查
故障现象:
之前协助用户安装 GreatSQL 测试环境时,遇到一个 case,数据库初始化时没有报错,但是使用mysqld_safe
去启动,会直接 crash ,详情报错如下:
用户机器系统为 kylin uos-PC 4.19.17 arm64-desktop ,aarch 64 架构, 配置 8C8GB。
问题分析:
查看系统报错日志 tail -n 10000 /var/log/messages | grep memory
没有明显报错;
网上查阅资料,mysqld got signal 11
报错的相关信息很少,而且每个遇到signal 11
导致 crash 的原因并不相同,有的是磁盘满了,有的是内存问题等等问题。
我把重点放在了 <jemalloc>:Error in munmap():Invalid argument
上。查阅 jemalloc 官网,得知 jemalloc 是一个内存管理器,可以优化内存分配策略、减少内存碎片、提升性能等方面。
查看 GreatSQL 源码,发现在 mysqld_safe
上找到了 jemalloc 的踪迹:
进一步查看源码,发现参数 load_jemalloc=1
,也就是说使用 mysqld_safe
去启动 GreatSQL 时,默认使用 jemalloc 进行内存管理。
查看用户机器的 jemalloc 的信息:
strings lib/libjemalloc.so | grep JEMALLOC_VERSION
,发现没有信息打印;
再次尝试全局查找:
find / -name jemalloc*
, 没有找到相关软件。
至此断定,用户的 PC 端没有 jemalloc 的相关依赖。初步断定是由于缺少软件依赖造成的 GreatSQL 服务没法启动。
问题调试
不妨假设如果不使用 jemalloc 而改用其他内存管理方式呢?
尝试将 load_jemalloc=1
改成 load_jemalloc=0
,继续使用 mysqld_safe
发现数据库能正常启动。
继续查看源码,发现如果将 load_jemalloc 更改成 disable (value=0),GreatSQL 会使用 glibc 默认的ptmalloc
进行内存分配。
那如果改用 mysqld
方式启动,不使用 mysqld_safe
去启动呢?
更改回
mysqld_safe
的默认值:load_jemalloc=1
(控制变量)使用
mysqld --defaults-file=greatsql.cnf &
去启动
发现数据库也能正常启动。
这时候不妨回顾一下mysqld_safe
和mysqld
的关系:
mysqld_safe 是一个在 Unix 上启动 GreatSQL 服务器推荐的方式,可以安全地启动,监控和重启 mysqld 进程。
所以如果不指定 malloc_lib 的方式,mysqld
使用 glibc 默认ptmalloc
进行内存分配。
这时候就有疑问了,为了适配多环境,为什么不继续使用 glibc 默认的ptmalloc
而是使用jemalloc
呢?
网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。ptmalloc 的主要问题是内存浪费、内存碎片、以及加锁导致的性能问题。
因为笔者对内存分配原理这块不是很了解,对这一块感兴趣的可以在网上查找相关的资料研究。
ptmalloc、tcmalloc 与 jemalloc 对比分析:https://www.cyningsun.com/07-07-2018/memory-allocator-contrasts.html
而根据以上的分析,更加推荐在缺少 GreatSQL 相关软件依赖时 ,手动安装软件(如 jemalloc 等)去启动 GreatSQL,以提升数据库性能。
总结
对数据库必须的依赖建议放在前期检查里,可以参考相关文章:openEuler、龙蜥 Anolis、统信 UOS 三大主流操作系统下编译 GreatSQL 二进制包:https://www.greatdb.com/Home/news/news_1/id/501.html
mysqld_safe
默认使用jemalloc
进行内存分配mysqld
使用 glibc 默认的ptmalloc
进行内存分配有时候遇到没有头绪的故障时,可以尝试从源码找到蛛丝马迹,进行问题排查和调试
版权声明: 本文为 InfoQ 作者【GreatSQL】的原创文章。
原文链接:【http://xie.infoq.cn/article/00ae1640c55b2aa46810a58d1】。文章转载请联系作者。
评论