Segfaults на новой машине: как отлаживать? - PullRequest
2 голосов
/ 13 января 2020

На нашей старой машине с Debian 10 все работало нормально. Недавно мы переехали на новый сервер, на котором также установлен Debian 10 на масштабируемом процессоре 1-го поколения Xeon. С моими процессами все запускается нормально, но спустя чуть больше часа (например, при запуске I Python или Jupyter) процесс загадочным образом вызывает ошибки. Я запустил эту простую тестовую программу через gdb:

import time
for i in range(36000):
    print('\r {0}'.format(i), end='')
    time.sleep(1)

и получил следующую обратную трассировку:

(gdb) run test-seg-fault.py 
Starting program: /home/breitsbw/anaconda3/bin/python test-seg-fault.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
 7791
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) backtrace
#0  0x0000000000000000 in ?? ()
#1  0x000055555566e900 in PyEval_RestoreThread (tstate=0x5555558c36d0) at /tmp/build/80754af9/python_1565725737370/work/Python/ceval.c:270
#2  0x00005555556dbbcc in pysleep (secs=<optimized out>) at /tmp/build/80754af9/python_1565725737370/work/Modules/timemodule.c:1844
#3  time_sleep (self=<optimized out>, obj=<optimized out>) at /tmp/build/80754af9/python_1565725737370/work/Modules/timemodule.c:371
#4  0x00005555556b857d in _PyMethodDef_RawFastCallKeywords (method=0x555555875120 <time_methods+288>, self=0x7ffff77b3d70, args=0x7ffff785b5d0, nargs=<optimized out>, kwnames=<optimized out>) at /tmp/build/80754af9/python_1565725737370/work/Objects/call.c:648
...

Вы можете видеть, что на этот раз программа работала чуть более 2 часов назад segfaulting. Я понятия не имею, как продолжить расследование #0 0x0000000000000000 in ?? () по трассировке GDB.

Я уже несколько раз пытался переустановить Anaconda, включая версию 2019.07. Я десятки раз проверял, что эта ошибка сегментации продолжает происходить - запускаю ли я Jupyter, I Python или просто простой скрипт python, представленный выше. Обычно скрипт выполняется около 3800 секунд. Я не уверен, почему GDB вызвал задержку в segfault.

После публикации этого вопроса мы обнаружили, что другие также испытывают segfault при запуске расширенных процессов (занимающих более 1 часа) с помощью другие программы (например, исполняемые файлы Fortran). Мы считаем, что существует аппаратно-программное взаимодействие, которое вызывает проблему. (Теперь может иметь смысл перенести этот вопрос в новое сообщество. Может ли модератор посоветовать?)

Буду признателен за любые советы о том, что исследовать или как отладить этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...