Исправление ошибки сегментации в 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>