【TDengine 使用环境】
生产环境
【TDengine 版本】
centos7.9 tdengine3.2.3.0
【部署方式】容器/非容器部署
非容器部署
【集群节点数】
【集群副本数】
【描述业务影响】
【问题复现路径/shan】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】
【报错完整截图】
【TDengine 使用环境】
生产环境
【TDengine 版本】
centos7.9 tdengine3.2.3.0
【部署方式】容器/非容器部署
非容器部署
【集群节点数】
【集群副本数】
【描述业务影响】
【问题复现路径/shan】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】
【报错完整截图】
“Resource temporarily unavailable” 对应 Linux errno 11(EAGAIN),是内核资源受限时的典型返回值。
taosd 在初始化 dnode(创建 vnode 工作线程、RPC 线程、内存池等)时,某个系统资源申请被拒绝,导致 dnode 创建失败。常见于:
线程/进程数超限(最常见):pthread_create 返回 EAGAIN
文件描述符耗尽:open/socket 返回 EAGAIN 或 EMFILE
内存映射失败:mmap 返回 EAGAIN(vm.max_map_count 过小或内存不足)
排查步骤
1. 确认当前进程实际限制
# 查看 taosd 进程的实际限制
cat /proc/<taosd_pid>/limits
# 查看当前用户会话限制
ulimit -a
根据运维知识库(TD-20260420113302),TDengine 部署前要求:
nproc soft/hard = 65536(用户最大进程/线程数)
nofile soft/hard = 1048576(最大打开文件数)
stack soft/hard = 65536(线程栈 KB)
fs.nr_open、fs.file-max = 1048576
net.ipv4.ip_local_port_range = 10000-65534
3. 重点检查几个常见坑
# 进程/线程数限制(ulimit -u 与 cgroup 双重生效)
ulimit -u
cat /sys/fs/cgroup/pids.max 2>/dev/null
# 文件描述符
ulimit -n
sysctl fs.file-max fs.nr_open
# 内存映射数量(vnode 多时容易踩到)
sysctl vm.max_map_count
systemd 部署时,/etc/security/limits.conf 对服务不生效,必须同时配置:
Docker/K8s 部署时,容器自身的 pids-limit、ulimits、max_map_count 都要检查,宿主机调优不代表容器内生效。
cgroup v2 的 pids.max 若过小,也会导致线程创建失败。
4. 修复配置
# /etc/security/limits.conf
* soft nproc 65536
* hard nproc 65536
* soft nofile 1048576
* hard nofile 1048576
* soft stack 65536
* hard stack 65536
# /etc/sysctl.conf
fs.file-max = 1048576
fs.nr_open = 1048576
vm.max_map_count = 262144 # 若确认是 mmap 问题
sysctl -p
改完后重启 taosd 服务,再观察日志确认 dnode 状态变为 Ready:
SHOW DNODES;
验证
修复后执行:
systemctl restart taosd
tail -f /var/log/taos/taosd.log # 观察 dnode 启动日志
并在 taos 命令行执行 SHOW DNODES;,确认新节点状态为 Ready 而不是 Offline。
另外补充两点:如果日志中同时出现大量 cannot allocate memory,要检查物理内存与 supportVnodes 配置是否匹配;如果只有 create dnode 这一步失败而其他节点正常,优先怀疑该新节点主机的资源限制,而非集群本身问题。