Вопрос или проблема
В настоящее время я использую графические процессоры на сервере с Ubuntu для запуска моделей машинного обучения. Мне часто нравится использовать команду watch
для мониторинга статусов GPU, например watch -n 1 nvidia-smi
. Обычно это работает нормально, но я заметил, что на одном из серверов возникает ошибка:
watch: /usr/local/lib/libncursesw.so.6: нет информации о версии (требуется для watch)
watch: /usr/local/lib/libncursesw.so.6: нет информации о версии (требуется для watch)
Ошибка сегментации (аварийный дамп)
Я попытался выполнить sudo apt-get install libncursesw6
и получил libncursesw6 уже является самой новой версией (6.2-0ubuntu2).
.
Есть ли что-то еще, что я могу сделать, чтобы исправить эту ошибку?
Правка
Вывод lddtree $PATH_TO_WATCH
таков:
watch => /usr/bin/watch (интерпретатор => /lib64/ld-linux-x86-64.so.2)
libncursesw.so.6 => /usr/local/lib/libncursesw.so.6
libtinfow.so.6 => /usr/local/lib/./libtinfow.so.6
libtinfo.so.6 => /usr/local/lib/libtinfo.so.6
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
Оказалось, что команда watch
вызвала эту ошибку, но htop
также вызывал эту ошибку. Один мой старый коллега смог мне помочь, сказав, что я должен выполнить следующие команды:
sudo rm -f /usr/local/lib/libncursesw.so.6
sudo ln -s /lib/x86_64-linux-gnu/libncursesw.so.6 /usr/local/lib/libncursesw.so.6
Полагаю, что имел место конфликт между предыдущей библиотекой и символической ссылкой? Если у кого-то есть лучшее и более полное понимание этого, пожалуйста, не стесняйтесь редактировать мой ответ.
Ответ или решение
Причины возникновения ошибки "Segmentation fault (core dumped)" при запуске команды watch
с nvidia-smi
Ситуация, описанная вами, указывает на наличие конфликта версий библиотек, которые используются в процессе выполнения команд, таких как watch
и htop
. Одна из возможных причин данной проблемы заключается в следующем:
-
Конфликт библиотек: Судя по выводам, когда вы вызываете
watch
, он пытается загрузить библиотекуlibncursesw.so.6
из пути/usr/local/lib/
, что говорит о том, что на вашем сервере была установлена пользовательская версия этой библиотеки. Это может привести к несовместимости, если версия библиотеки не соответствует ожидаемой. -
Отсутствие информации о версиях: Сообщение об ошибке "no version information available (required by watch)" указывает на то, что библиотека, которую использует
watch
, не предоставляет необходимую информацию о версиях. Это может происходить, если библиотека была собрана с неправильными параметрами или несовместима с вашей текущей системой. -
Символическая ссылка: Решение, предложенное вашим коллегой, связано с созданием символической ссылки, указывающей на стандартную версию библиотеки, расположенной в системных директориях, таким образом, вы устраняете конфликт, вызванный пользовательской версией библиотеки.
Решение проблемы
Ваш коллега предложил следующее решение, которое предполагает удаление конфликтующей библиотеки и создание новой символической ссылки:
sudo rm -f /usr/local/lib/libncursesw.so.6
sudo ln -s /lib/x86_64-linux-gnu/libncursesw.so.6 /usr/local/lib/libncursesw.so.6
Эти команды выполняют следующие действия:
- Первая команда удаляет пользовательскую библиотеку
libncursesw.so.6
, которая может быть некорректной или устаревшей. - Вторая команда создает символическую ссылку к системе, гарантируя, что программы, такие как
watch
иhtop
, будут использовать корректную версию библиотеки.
Дополнительные рекомендации
-
Проверка версий: Убедитесь, что у вас установлены последние версии необходимых библиотек. Это можно сделать с помощью команд:
sudo apt-get update sudo apt-get upgrade
-
Удаление сторонних библиотек: Если у вас есть и другие версии библиотек ncurses или других библиотек, установленных в
/usr/local/lib/
, рассмотрите возможность их удаления, так как они могут создавать дополнительные конфликты. -
Использование среды: Если вам необходимо использовать специфические версии библиотек для других проектов, рассмотрите использование контейнеров (например, Docker), которые позволят вам изолировать окружение с необходимыми версиями библиотек.
-
Масштабная проверка: После внесенных изменений перезапустите терминал и попробуйте снова запустить команды
watch
иhtop
, чтобы убедиться, что ошибка была устранена.
Эти шаги должны помочь вам избежать ошибок сегментации и обеспечить стабильную работу ваших команд. Надеюсь, эта информация была полезной для решения вашей проблемы.