官方文档中的【内存优化】章节描述不清晰,而且按照章节内容操作报错

如题,参照【 内存优化 | TDengine 文档 | 涛思数据】中的性能优化部分对涛思DB进行优化的时候出现如下问题:

版本:tdengine/tsdb:3.4.0.0
部署方式:容器部署
出现问题
1.容器中并没有携带【set_taos_malloc.sh】,需要从github中手动下载并拷贝到容器中的。
2.执行【set_taos_malloc.sh】脚本报错,需要手动在容器中创建【/usr/local/taos/bin】目录:

root@bbb184c1e527:/opt# ./set_taos_malloc.sh -m 3
./set_taos_malloc.sh: line 61: /usr/local/taos/bin/set_taos_malloc_env.sh: No such file or directory
./set_taos_malloc.sh: line 112: /usr/local/taos/log/set_taos_malloc.log: No such file or directory
./set_taos_malloc.sh: line 115: /usr/local/taos/bin/set_taos_malloc_env.sh: No such file or directory
./set_taos_malloc.sh: line 115: /usr/local/taos/bin/set_taos_malloc_env.sh: No such file or directory
---------------------------------------------
Memory allocator setting complete!
  Mode: 3 (Jemalloc optimization)
  Shell env file:    /usr/local/taos/bin/set_taos_malloc_env.sh
  Systemd taosd env file:  /etc/default//taosd
  Systemd taosadapter env file:  /etc/default//taosadapter

To use in shell:    source /usr/local/taos/bin/set_taos_malloc_env.sh
To use in systemd:  Just restart your service, EnvironmentFile is already configured.

3.手动创建【/usr/local/taos/bin】目录后,执行【set_taos_malloc.sh】脚本,显示成功,但是【set_taos_malloc_env.sh】脚本需要的【/usr/local/taos/driver/libjemalloc.so】并不存在:

root@bbb184c1e527:/opt# ./set_taos_malloc.sh -m 3
---------------------------------------------
Memory allocator setting complete!
  Mode: 3 (Jemalloc optimization)
  Shell env file:    /usr/local/taos/bin/set_taos_malloc_env.sh
  Systemd taosd env file:  /etc/default//taosd
  Systemd taosadapter env file:  /etc/default//taosadapter

To use in shell:    source /usr/local/taos/bin/set_taos_malloc_env.sh
To use in systemd:  Just restart your service, EnvironmentFile is already configured.

image
image

5.上述.so文件是否需要手动创建/拷贝到对应目录?

官方文档写的实在是太粗糙了,按照文档完全无法操作,做为一个没有C++背景的使用者,面对这种情况不知道应该怎么做?我之前的提问中关于修改配置的内容也是一样,从官方文档中根本得不到什么帮助,只能来论坛求助!

你遇到的问题,根源在于 set_taos_malloc.sh 这个脚本是为传统的物理机或虚拟机部署设计的,未完全适配 Docker 容器的环境。

它假设文件按标准路径存放,但在你的容器中,这些路径或文件可能并不存在。

下面是两种可行的解决方法。

方案一:手动补齐依赖文件(快速修复)

如果你希望继续使用 set_taos_malloc.sh 脚本,可以手动创建它所需的目录并复制文件。

  1. 获取缺失的 libjemalloc.so 文件
    你可以从 TDengine 官方客户端安装包中获得它。
  • 在宿主机下载 :访问 TDengine 官网下载页面,获取与容器内 TDengine 版本(3.4.0.0)相匹配的客户端(Client)安装包。
  • 解压并复制 :解压下载的安装包,在 driver 目录下可以找到 libjemalloc.so 文件。然后,使用 docker cp 命令将其复制到容器内的 /usr/local/taos/driver/ 目录:

bash
#docker cp <宿主机文件路径> <容器ID或名称>:<容器内目标路径>
docker cp /path/to/libjemalloc.so your_container_name:/usr/local/taos/driver/

  1. 手动创建脚本所需的目录
    脚本执行需要 /usr/local/taos/bin 目录,如果不存在,需要手动创建并确保有足够权限:

bash

#进入容器
docker exec -it your_container_name /bin/bash
#创建 bin 目录
mkdir -p /usr/local/taos/bin

  1. 重新运行脚本
    现在再次运行脚本,它应该能成功找到依赖文件并完成配置。

方案二:基于官方镜像自行集成(推荐生产环境)

对于生产环境,更稳健的做法是基于官方镜像构建一个新镜像,提前将所有依赖集成进去。

  1. 编写 Dockerfile
    创建一个 Dockerfile ,内容参考如下:

Dockerfile
#使用官方镜像作为基础 FROM tdengine/tdengine:3.4.0.0
#下载并解压与基础镜像版本匹配的 TDengine 客户端
#下载链接需从官网获取,版本请务必匹配 RUN curl -L -o /tmp/tdengine-client.tar.gz \ “https://www.taosdata.com/assets/downloads/TDengine-client-3.4.0.0-Linux-x64.tar.gz” \ && tar -xzf /tmp/tdengine-client.tar.gz -C /tmp/
#复制 libjemalloc.so 文件到正确的目录 RUN cp /tmp/tdengine-client-/driver/libjemalloc.so /usr/local/taos/driver/ \ && rm -rf /tmp/tdengine-client* # 创建脚本所需的 /usr/local/taos/bin 目录 RUN mkdir -p /usr/local/taos/bin

  1. 构建并运行新镜像
    使用 docker build 命令构建新镜像,并用它来启动容器:

bash
#在 Dockerfile 所在目录执行 docker build -t my-tdengine:3.4.0 . docker run -d --name my_tdengine_container my-tdengine:3.4.0