ArangoDB突发No file descriptors available IO错误,写入操作失败求助
问题解决步骤
1. 修复版本不匹配问题
你的ArangoDB服务器版本(0.18.2)与客户端工具(arangosh 3.11.8)存在严重版本差异,这是引发异常的核心隐患之一:
- 卸载当前的ArangoDB服务器版本,安装与
arangosh匹配的3.11.8版本 - 安装完成后验证版本一致性:执行
arangod --version和arangosh --version,确保两者版本完全一致
2. 解决文件描述符不足问题
错误提示No file descriptors available明确指向系统/进程的文件描述符配额耗尽:
- 临时调整(当前会话生效):
执行命令提升当前shell的文件描述符限制:
随后重启ArangoDB服务:ulimit -n 65535systemctl restart arangodb3 - 永久调整(系统重启后生效):
- 编辑
/etc/security/limits.conf,添加以下内容:arangodb soft nofile 65535 arangodb hard nofile 65535 - 编辑
/etc/systemd/system.conf,修改或添加:DefaultLimitNOFILE=65535 - 重载systemd配置并重启服务:
systemctl daemon-reload systemctl restart arangodb3
- 编辑
3. 修复RocksDB损坏的数据文件
RocksDB压缩失败后标记数据库为只读,且缺失指定.sst文件,需修复数据目录:
- 先停止ArangoDB服务:
systemctl stop arangodb3 - 备份数据目录(必须执行,防止数据丢失):
cp -r /ssd1/arangodb3 /ssd1/arangodb3_backup_$(date +%Y%m%d) - 执行ArangoDB的修复命令(升级到3.11.8版本后使用):
arangod --repair --database.directory /ssd1/arangodb3 - 修复完成后启动服务,验证是否恢复正常:
systemctl start arangodb3
4. 优化批量插入配置
针对你的Python多进程插入场景,优化配置减少资源占用:
- 调整ArangoDB的RocksDB配置:编辑
/etc/arangodb3/arangod.conf,添加或修改:
重启服务生效[rocksdb] max-open-files = 10000 - 降低Python应用的并发数:64进程可能超出系统和数据库的承载能力,尝试调整为32或16进程
- 使用ArangoDB的批量插入API(如Python驱动的
bulk_insert方法或arangodb-bulk-import工具)代替单条AQL插入,大幅减少IO和连接开销
内容的提问来源于stack exchange,提问作者Teakwood J Overclutch
相关产品推荐
相关产品推荐

