Ошибка сегментации Python при запуске через ssh

#python #ssh #segmentation-fault #multiprocessing

#питон #ssh #сегментация-ошибка #многопроцессорная обработка

Вопрос:

Когда я запускаю свою многопроцессорную программу python из терминала (командная строка), все работает нормально.

 $ /home/florian/tests/run_tests.sh -d -w
 

Скрипт run_tests.sh — это просто оболочка для вызова Python (устанавливает переменные и вызывает python)

Когда точно такую же команду я запускаю из другого окна, используя SSH, почти все задачи (процессы) завершаются с ошибкой сегментации (165 из 189 [87%]):

 $ ssh -o StrictHostKeyChecking=no florian@remote '/home/florian/tests/run_tests.sh -d -w'
 

Окружающая среда:

 OS: SLES11
Python: 3.8.1
GNU bash, version 3.2.57(2)-release (x86_64-suse-linux-gnu)

Number of CPUs: 24


core file size          (blocks, -c) 1
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 1029396
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) 112008408
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 32768
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1029396
virtual memory          (kbytes, -v) 108780880
file locks                      (-x) unlimited
 

Я даже пытался ограничить количество используемых процессоров до 1 — все равно не работает

 import multiprocessing as mp

#pool = mp.Pool(mp.cpu_count())
pool = mp.Pool(1)
 
  • У вас есть какие-нибудь идеи, почему он так себя ведет: работает на локальном, выходит из строя на ssh?
  • Знаете ли вы какие-либо настройки SSH, которые могли бы помочь в выделении памяти (если это проблема)?

Заранее спасибо, Збигнев

Ответ №1:

Для всех, кто столкнулся бы с подобной проблемой: проблема была в переменных среды.

При подключении через SSH остаются только некоторые переменные — rest уничтожается (подробности см. В описании ssh).

Так что внутри скрипта-оболочки мне пришлось export LD_LIBRARY_PATH — спасибо моему коллеге Франсуа за очень ценный совет 🙂

Глупая ошибка, но… может быть, кому-то этот ответ пойдет на пользу.