BLAST数据库分配错误

2 投票
1 回答
1136 浏览
提问于 2025-04-17 02:50

我在生物信息学的StackExchange上问过这个问题,但因为我觉得这更像是个计算机问题,所以我想在这里试试运气。

当我在一个大数据库(所有人类蛋白质)上运行本地的BLAST(版本2.2.24+)时,出现了以下错误:

proteinsApplicationError: Command 'blast-2.2.24+/bin/blastp.exe -query "query.fasta" -
db "human-proteins.fasta" -out blastOutput.xml -evalue 0.01 -outfmt 5'       
returned     non-zero exit status 2, 'BLAST Database error: CSeqDBAtlas::MapMmap: 
While mapping file [human-proteins.fasta.psq] with 5550749 bytes allocated, caught 
exception:'

我在网上搜索时只找到了seqdbatlas的源代码:http://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/lxr/source/src/objtools/blast/seqdb_reader/seqdbatlas.cpp,在里面我发现了:

1214         if (expt.length()) {
1215             // For now, if I can't memory map the file, I'll revert to
1216             // the old way: malloc a chunk of core and copy the data
1217             // into it.
1218             
1219             if (expt.find(": Cannot allocate memory") == expt.npos) {
1220                 expt = string("CSeqDBAtlas::MapMmap: While mapping file [") + 
                 (*m_Fname) + "] with " +
1221                     NStr::UInt8ToString(atlas->GetCurrentAllocationTotal()) +
1222                     " bytes allocated, caught exception:" + expt;
1223                 
1224                 SeqDB_ThrowException(CSeqDBException::eFileErr, expt);
1225             }
1226         }

我对C++的了解有限,但我从中理解到的是,电脑的内存不足以处理这么大的数据库来运行BLAST。这是对的吗?如果是的话,有没有办法在不更换更大内存的电脑的情况下运行这个BLAST?如果不是,那我遇到的错误是什么呢?

提前谢谢你,Niek

1 个回答

1

我通过把查询文件分成两个部分来解决这个问题,并且使用了blast 2.2.25版本,而不是2.2.24版本。

撰写回答