Исправление ошибки сегментации в bcftools

Я пытаюсь объединить 3000 бактериальных файлов bcf с помощью bcftools. Файлы vcf были сгенерированы с использованием GATK, преобразованы в bcf и проиндексированы с помощью bcftools. Bcftools приступает к анализу 20% данных, но продолжает преждевременное завершение и создает объединенные файлы bcf только для части вариантов (до 500 КБ из 2М бактериального генома). Код, который я использую, выглядит следующим образом:

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 образцов без каких-либо проблем.

Поиск в Интернете: "Сегфоут происходит, когда ссылка на переменную выходит за пределы сегмента, в котором находится эта переменная, или при попытке записи в местоположение, которое находится в сегменте только для чтения". Команда выполняется в кластере с 80 ГБ доступной оперативной памяти для конкретной работы. Я не уверен, связана ли эта ошибка с самой программой bcftools или с ограничением системы, в которой выполняется команда?

Вот примеры файлов bcf для репликации ошибки ( https://figshare.com/articles/BCF_file_segfault/7412864). Ошибка появляется только для больших размеров выборки, поэтому я не мог уменьшить размер дальше.

3 ответа

Решение

Это была ошибка в bcftools, и автор любезно исправил ее после уведомления:

https://github.com/samtools/bcftools/issues/929#issuecomment-443614761

Я не уверен, связана ли эта ошибка с самой программой 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, На этом этапе введите where, info registers, info locals, а также x/20i $pc-40 на (gdb) подскажите и обновите ваш вопрос с выводом.

Этот вывод, вероятно, позволит кому-то определить, с какой ошибкой вы сталкиваетесь, какие обходные пути возможны и т. Д. И т. Д.

Это также информация, которую разработчики bfctools понадобится, если вы сообщите о проблеме им.

У меня также были проблемы при объединении тысяч файлов VCF с bcftools, В моем случае проблема заключалась в количестве открытых файлов. Возможно, вам придется увеличить лимит открытого файла. Попробуйте эти команды:

# check soft limit
ulimit -Sn

#check hard limit
ulimit -Hn

#set soft limit
ulimit -Sn <number>
Другие вопросы по тегам