使用GATK对bam文件进行去重操作的时候发现报错了:
理解了一下应该是程序在读取运行中间文件的时候,超过了Linux操作系统允许的用户IO读取范围,所以查看了一下Linux对于当前用户读取文件数量的软限制:
发现进程最大允许读取的文件数量是1024(默认值)
非root用户可以对文件读取的软限制进行临时修改:
ulimit -n 3000
修改后:
如果想要永久修改需要管理员权限,更改系统配置文件:
sudo vi /etc/security/limits.conf
如果不想修改系统配置以适应软件读取的话,GATK提供了参数可以控制读取文件句柄的数量:
这个参数指定了当读取结束溢出到磁盘时保持打开的最大文件句柄数。一般情况下,设置的这个数字要比每个进程可打开的最大文件数量稍低一些。
所以我们在运行的时候加入该参数对文件读取进行限制:
gatk --java-options '-Xmx50G -XX:ConcGCThreads=2 -XX:ParallelGCThreads=2 -Djava.io.tmpdir=xxx MarkDuplicates -MAX_FILE_HANDLES 2800 -I bam -O bam -M metrics
然后就可以正常运行啦。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!