You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行blastn v2.12.0多线程模式时抛出std::length_error异常求助

BLASTN v2.12.0 RHEL7/CentOS多线程运行报错排查方案

terminate called after throwing an instance of 'std::length_error' what(): basic_string::_M_create

根因定位

  • 触发报错的核心原因是系统依赖库版本不兼容:RHEL7/CentOS7默认搭载的GLIBC版本仅为2.17,而NCBI官方预编译的BLAST v2.12.0版本最低要求GLIBC 2.23及以上版本,低版本GLIBC的字符串内存分配接口在高并发场景下会触发底层异常。
  • Ubuntu 18.04默认搭载GLIBC 2.27,完全满足BLAST v2.12.0的运行要求,因此本地运行不会触发报错。
  • -mt_mode 1按查询拆分的多线程模式会并发处理大量输入序列字符串,进一步放大了低版本GLIBC的接口缺陷,所以仅在该参数搭配高线程数时会触发报错。

可行修复方案

方案1:使用适配低版本系统的BLAST版本

直接替换为BLAST v2.11.0及更低的官方预编译版本,该版本编译时适配了RHEL7/CentOS7的GLIBC版本,原有运行参数不需要修改即可正常运行。

方案2:通过conda安装适配环境的BLAST

使用bioconda通道安装BLAST,conda会自动匹配当前系统的依赖库版本,不会出现兼容性问题,安装命令如下:
conda install -c bioconda blast==2.12.0
安装完成后激活对应conda环境,再运行原有blastn命令即可。

方案3:调整运行参数临时规避

如果暂时无法替换BLAST版本,可以通过修改参数规避高并发场景的触发条件:

  • 将-num_thread参数降低到16及以下,减少并发处理的压力
  • 把-mt_mode参数从1改为0(按数据库拆分模式),该模式下不会触发高频的查询序列字符串并发分配操作,大部分场景下可正常运行

验证建议

优先用小样本测试调整后的方案,确认不会抛出异常后再提交全量任务,避免浪费超算计算资源。

内容的提问来源于stack exchange,提问作者Jianshu Zhao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:06:03