错误:samtools sort: fail to open "merged.sorted.bam.tmp.1020.bam": Too many open files
官方解答:
SamTools排序失败,当使用太多TMP文件 ·问题 #603 ·萨姆图尔/萨姆图尔 (github.com)
中文的前人笔记:
samtools sort Failed to open file问题 - 简书 (jianshu.com)
我刚开始没看懂,看懂之后总结一下。
总之,这个问题就是:
服务器中一个进程允许打开的文件数量是有限的,也即运行过程中生成的.tmp文件数是有限的,而samtools sort默认使用内存是768M(见-m参数)。
因此,当一个bam文件太大的时候,sort过程生成的文件数就会超出限制。
可以通过命令行查看ultimate -n,查看一个进程允许打开的文件数量。我用的服务器是1024个文件数,但由于我没有管理员权限,没有办法改。
所以另一个思路就是增加允许的tmp文件的大小,修改-m参数。
我自己的测试:
-m 3G时,一个.tmp文件大约是1.1G,
-m 4G时,一个.tmp文件大约是1.3-1.4G,
-m 5G时,一个.tmp文件大约是1.8G。
但同时需要这个节点有足够的运行内存,否则就会出现错误如下:
samtools sort: couldn't allocate memory for bam_mem
当我的代码改成这样的时候,问题解决!
samtools sort --threads 50 -o merged.sorted.bam merged.bam -m 5G