修复 bcftools 中的分段错误

Fixing segmentation fault error in bcftools

我正在尝试使用 bcftools 合并 3000 个细菌 bcf 文件。 vcf 文件已使用 GATK 生成并转换为 bcf 并由 bcftools 编制索引。 bcftools 继续分析 20% 的数据,但它会过早终止并仅为一部分变体生成合并的 bcf 文件(来自 2M 细菌基因组的高达 500kb)。我使用的代码是这样的:

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 个样本尝试了相同的命令,没有任何问题。

在线搜索,"A segfault occurs when a reference to a variable falls outside the segment where that variable resides, or when a write is attempted to a location that is in a read-only segment"。该命令在具有 80Gb 可用 RAM 的集群上用于特定作业 运行。我不确定这个错误是由于 bcftools 软件本身的问题还是由于 运行 命令的系统限制?

这是复制错误的示例 bcf 文件 (https://figshare.com/articles/BCF_file_segfault/7412864)。 该错误仅针对大样本量出现,因此我无法进一步减小大小。

I am not sure whether this error is due to a problem with the bcftools software itself or because of the limitation of system which is running the command?

当程序崩溃时,总是程序本身的错误——如果遇到系统限制,应该告诉你这样(例如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) 提示符下键入 whereinfo registersinfo localsx/20i $pc-40,并使用输出更新您的问题。

此输出可能使某人能够确定您 运行 遇到的错误、可能的解决方法等。

这也是 bfctools 的开发人员在您向他们报告问题时需要的信息。

我在将数千个 vcf 文件与 bcftools 合并时也遇到了问题。就我而言,问题是打开文件的数量。您可能需要增加打开文件的限制。试试这些命令:

# 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