我正在尝试使用bcftools合并3000个细菌bcf文件。vcf文件是使用GATK生成的,并转换为bcf,并由bcftools进行索引。bcftools继续分析20%的数据,但它总是过早终止,并只为一部分变体(从2M个细菌基因组中最多500kb(产生合并的bcf文件。我使用的代码是这样的:
bcftools1.7/bcftools merge -l VarList.txt -0 --missing-to-ref --threads 1 -O b > CombinedVCF
输出错误为:
/bin/sh: line 1: 17041 Segmentation fault (core dumped) bcftools/bcftools merge -l VarList.txt -0 --missing-to-ref --threads 1 -O b > CombinedVCF
之前,我对400个样本尝试了相同的命令,没有任何问题。
在线搜索时,"当对变量的引用位于该变量所在的段之外时,或者当试图写入只读段中的位置时,会发生segfault"。该命令运行在特定作业具有80Gb可用RAM的群集上。我不确定这个错误是由于bcftools软件本身的问题还是由于运行该命令的系统的限制?
以下是用于复制错误的示例bcf文件(https://figshare.com/articles/BCF_file_segfault/7412864)。这个错误只出现在大样本量的情况下,所以我无法进一步缩小样本量。
我不确定这个错误是由于bcftools软件本身的问题还是由于运行该命令的系统的限制?
当一个程序崩溃时,总是程序本身的错误——如果它遇到系统的限制,它应该告诉你这样做(例如unable to allocate NNN bytes
(,而不是崩溃。
你的第一步应该是找出它在哪里崩溃:
gdb -ex run --args bcftools1.7/bcftools merge -l VarList.txt -0 --missing-to-ref --threads 1 -O b
GDB应停止使用Program received SIGSEGV
。此时,在(gdb)
提示符下键入where
、info registers
、info locals
和x/20i $pc-40
,并使用输出更新问题。
此输出可能使某人能够确定您遇到的错误、可能的解决方案等。
如果你要向bfctools
的开发人员报告这个问题,这也是他们需要的信息。
我在用bcftools
合并数千个vcf文件时也遇到了问题。在我的案例中,问题在于打开的文件数量。您可能需要增加打开文件的限制。尝试以下命令:
# check soft limit
ulimit -Sn
#check hard limit
ulimit -Hn
#set soft limit
ulimit -Sn <number>
这是bcftools中的一个错误,作者在通知后友好地修复了它:
https://github.com/samtools/bcftools/issues/929#issuecomment-443614761