修复 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)
提示符下键入 where
、info registers
、info locals
和 x/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
我正在尝试使用 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)
提示符下键入 where
、info registers
、info locals
和 x/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