Влияние LD_LIBRARY_PATH на простые команды в Linux
Я использую Red Hat Enterprise Linux Server версии 5.7 (Tikanga).
Когда я изменяю LD_LIBRARY_PATH, система становится очень медленной для каждой команды (за исключением встроенных команд оболочки, таких как cd
)
Например, ls
в пустом каталоге занимает около 1 секунды. Когда я изменяю LD_LIBRARY_PATH обратно на значение по умолчанию, все выглядит нормально.
LD_LIBRARY_PATH, который я добавил, не особенно длинный (10-11 каталогов.)
Я пытался установить LD_DEBUG=all, но не смог найти ничего подозрительного.
Я проверил все FS, которые я добавил в PATH, имеют нормальную производительность.
Пожалуйста, скажите мне, что еще я должен проверить и в чем может быть причина замедления.
2 ответа
LD_LIBRARY_PATH может использоваться для переопределения вещей. Таким образом, когда любому исполняемому файлу (например, ls) нужно что-то общее, например, libc, ему придется сканировать все папки из env. переменная, прежде чем она сможет выглядеть в "нормальных" местах. Я полагаю, что с ldconfig система способна кешировать список библиотек для быстрого поиска. С переменной env он должен каждый раз пересматривать (переменная может измениться).
Кажется, что общее количество сканируемых файлов, возможно, довольно велико. Попробуйте синхронизировать все каталоги вместе.
Я обнаружил, что проблема, одна NFS, которая была в LD_LIBRARY_PATH, иногда не вела себя хорошо. Таким образом, поиск по единственному каталогу занял 0,01 секунды, что складывалось для каждой библиотеки и пути.