GreatSQL启动崩溃:jemalloc依赖缺失问题排查

news2025/4/24 1:29:48

GreatSQL启动崩溃:jemalloc依赖缺失问题排查

故障现象:

之前协助用户安装 GreatSQL 测试环境时,遇到一个 case,数据库初始化时没有报错,但是使用mysqld_safe去启动,会直接 crash ,详情报错如下:

.....
<jemalloc>: Error in munmap():Invalid argument
2025-02-13T06:32:20.617961Z [System][MY-013576][InnoDB]InnoDB initialization has satrt.
<jemalloc>: Error in munmap():Invalid argument
2025-02-13T06:32:20Z - mysqld got signal 11;
most likely, you have hit a bug,but this error can also be caused by malfunctioning hardware.
.....

用户机器系统为 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 的踪迹:

...
# Add jemalloc to ld_preload if no other malloc forced - needed for TokuDB 
#
 if test $load_jemalloc -eq 1 
 then   
     for libjemall in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do     
     if [ -r "$libjemall/libjemalloc.so.1" ]; then                    add_mysqld_ld_preload "$libjemall/libjemalloc.so.1"       
     break     
     fi     
  done
fi 

进一步查看源码,发现参数 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 发现数据库能正常启动。

# ps -ef | grep greatsql
root      4521     1  0 15:07 ?        00:00:00 /bin/sh /greatsql/svr/greatsql/bin/mysqld_safe --defaults-file=/greatsql/conf/greatsql.cnf
greatsql   6176  4521  5 15:07 ?        00:00:02 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql.cnf --basedir=/greatsql/svr/greatsql --datadir=/greatsql/dbdata/data3306/data --plugin-dir=/greatsql/svr/greatsql/lib/plugin --user=greatsql --log-error=/greatsql/logs/error3306.log --pid-file=/greatsql/dbdata/data3306/data/greatsql.pid --socket=/greatsql/dbdata/data3306/data/greatsql.sock --port=3306

继续查看源码,发现如果将load_jemalloc 更改成disable (value=0),GreatSQL 会使用 glibc 默认的ptmalloc 进行内存分配。

那如果改用 mysqld方式启动,不使用 mysqld_safe 去启动呢?

  1. 更改回 mysqld_safe 的默认值: load_jemalloc=1 (控制变量)
  2. 使用 mysqld --defaults-file=greatsql.cnf & 去启动

发现数据库也能正常启动。

这时候不妨回顾一下mysqld_safemysqld的关系:

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 进行内存分配
  • 有时候遇到没有头绪的故障时,可以尝试从源码找到蛛丝马迹,进行问题排查和调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型助力 Support Case 分析,提升云服务效率

1. 背景 技术工单&#xff08;Support Case&#xff09;是企业在进行云平台操作的时候通常会用到的一种技术支持类型&#xff0c;提供的技术支持通常包括所有的云服务的使用问题、账单问题、限制额度提升等等。对于云平台的管理者而言&#xff0c;对各个 BU 所提的工单进行统计…

ubuntu磁盘挂载

1、‌查看磁盘设备及分区‌ 命令‌&#xff1a;列出所有块设备&#xff08;磁盘及分区&#xff09; lsblk 0表示此块未挂载 2、格式化分区 sudo mkfs.ext4 /dev/sdb 注意sdb换成自己的块名称 3、创建挂载点目录‌ sudo mkdir -p /mnt/data4、永久挂载 sudo blkid /dev…

chili3d调试笔记8 打印零件属性 浏览器元素展开

无效&#xff0c; 返回的是节点不是坐标啥的&#xff0c; 找他的属性 把document和selectednote&#xff08;空集&#xff09;传给handleshowproperty方法 怎么获得selectnotes和selectnotes的property值 有selectnotes运行这段就行了 明天再搞 ----------------------------…

新书速览|DeepSeek移动端AI应用开发:基于Android与iOS

《DeepSeek移动端AI应用开发&#xff1a;基于Android与iOS》 1 本书内容 《DeepSeek移动端AI应用开发:基于Android与iOS》深入剖析了DeepSeek平台的架构原理、API调用及开发实践等核心内容&#xff0c;助力读者在Android与iOS移动端高效集成DeepSeek API&#xff0c;打造出契…

Android调用springboot接口上传大字段,偶现接口超时的优化

介绍 最近有个功能&#xff0c;Android通过okhttp上传实体类&#xff0c;实体类包含一个大字段&#xff0c;上传的字符串长度达到300k&#xff0c;偶现接口超时的情况&#xff0c;大概100次有5次&#xff0c;看日志发现数据并没有到达接口&#xff0c;可能在网络传输中就超时了…

react组件之间如何使用接收到的className(封装一个按钮案例)

带有hover渐变效果 一、父组件 import LineGradientBox from ../line-gradient-box; import styles from ./index.module.scss;<LineGradientBoxfontSize{20}className{styles.btn_height}textSign upwidth"100%"onClick{() > {navigate(/sign-up);}} /> …

JavaScript 数组常用方法解析

1. concat - 合并数组 语法&#xff1a; const newArray oldArray.concat(value1, value2, ..., arrayN); 作用&#xff1a; 将当前数组与其他数组或值合并&#xff0c;返回一个新数组&#xff0c;原数组不变。 测试案例&#xff1a; const arr1 [1, 2, 3]; const arr2…

09.传输层协议 ——— TCP协议

文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…

数字化转型“变形记”:中钧科技经营帮如何让企业长出“智慧骨骼”

数字化转型就像给企业安装一个"智慧引擎"&#xff0c;而中钧科技的经营帮平台就是这台引擎的智能控制系统。让我们用"人体"来打个比方——当企业的数据、流程、决策像神经脉络般打通&#xff0c;才能真正实现灵活运转。下面就以经营帮的五大核心板块为例&a…

【问题解决】centos7已经不维护了,如何继续使用yum源?

背景 CentOS 7 已于2024年6月30日停止维护&#xff0c;在停止维护后我们之前配置的国内镜像源大多都是空目录了&#xff0c;即在线国内镜像源不可用,就像下边这样提示&#xff1a; [rootbogon yum.repos.d]# yum install vim 已加载插件&#xff1a;fastestmirror Loading mi…

Redis 接收连接

阅读本文前&#xff0c;建议先看&#xff1a;Redis 事件循环&#xff08;Event Loop&#xff09;。 Redis 6 支持接收 3 种连接&#xff0c;对应的接收处理器如下&#xff1a; TCP&#xff1a;acceptTcpHandler&#xff1b;TLS&#xff1a;acceptTLSHandler&#xff1b;Unix …

【计算机视觉】CV实战项目- Face-and-Emotion-Recognition 人脸情绪识别

Face-and-Emotion-Recognition 项目详细介绍 项目概述项目功能项目目录结构项目运行方式1. 环境准备2. 数据准备3. 模型训练4. 模型运行 常见问题及解决方法1. **安装依赖问题**2. **数据集问题**3. **模型训练问题**4. **模型运行问题** 项目实战建议项目参考文献 项目概述 F…

基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案

0 引言 近年来&#xff0c;我国自主可控芯片在国家政策和政 府的支持下发展迅速&#xff0c;并在电力、军工、机械、 通信、电子、医疗等领域掀起了国产化替代之 风&#xff0c;但在芯片自主可控和国产化替代方面还有明 显的不足之处。 2022年我国集成电路进口量多 达 5 3…

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…

长期行为序列建模技术演进:从SIM到TWIN-v2

背景 在推荐系统与广告投放领域&#xff0c;长期行为序列建模旨在从用户数月甚至数年的历史行为中捕捉稳定兴趣模式&#xff0c;是解决冷启动、提升推荐精度的关键。随着工业界需求激增&#xff0c;SIM、ETA、SDIM、TWIN及TWIN-v2等模型相继诞生&#xff0c;推动技术不断革新。…

Linux下 REEF3D及DIVEMesh 源码编译安装及使用

目录 软件介绍 基本依赖 一、源码下载 1、REEF3D 2、DIVEMesh 二、解压缩 三、编译安装 1、REEF3D 2、DIVEMesh 四、算例测试 软件介绍 REEF3D是一款开源流体动力学框架&#xff0c;提供计算流体力学及波浪模型。软件采用高效并行化设计&#xff0c;可以在大规模处理器…

嵌入式软件测试的革新:如何用深度集成工具破解效率与安全的双重困局?

在汽车电子、工业控制、航空航天等嵌入式开发领域&#xff0c;团队常面临一个看似无解的悖论&#xff1a;如何在保证代码安全性的前提下&#xff0c;大幅提升测试效率&#xff1f; 传统测试工具往往需要搭建独立环境、插入大量桩代码&#xff0c;甚至需要开发者手动编写测试用例…

Ubuntu24.04安装ROS2问题

1&#xff0c;根据官方指导安装&#xff0c;安装到步骤&#xff1a; sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 时遇到问题。导致sudo apt update一直报错&#xff1a; 找了几天的资料…

【图问答】DeepSeek-VL 论文阅读笔记

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于图片问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;的任务 2. 模型结构 和 三段式训练 1&#xff09;使用 SigLIP 和 SAM 作为混合的vision encoder&#xf…

【专题刷题】滑动窗口(二):水果成篮,所有字母异位词,乘积小于 K 的子数组

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…