Назад | Перейти на главную страницу

Почему `ls --color = always` может работать медленно для небольшого каталога?

Для определенного каталога DIR в моей системе ls --color=always занимает около 8 секунд, хотя содержит менее 10 файлов и подкаталогов. Без аргумента о цвете это не займет много времени.

Почему бы ls так долго рассуждая о цвете, и как я могу узнать, что именно занимает так много времени? Вероятно, это какой-то подкаталог в DIR, который смонтирован, но как я могу узнать, какой из них является источником проблем?

Просто отключили цвет на серверах на моей работе. Согласно этому блогу: http://www.techper.net/2011/01/25/ls-command-slow-on-very-large-directories/

Это может быть связано с тем, что функция stat () вызывается на всех различных монтировках в определенном каталоге для получения информации, представленной цветами ...

В этом легко убедиться:

time command ls /dir/with/many/toplevel/entries/ >/dev/null
time $SHELL -c "ls --color=always /dir/with/many/toplevel/entries/ >/dev/null"

Первая команда для созданной мной проблемной структуры каталогов дает:

real    0m0.523s
user    0m0.284s
sys     0m0.052s

И второй:

real    1m47.799s
user    0m0.360s
sys     0m0.928s

Имейте в виду, что если вы повторите нижний «тест», его второй запуск будет иметь данные stat () уже в кеше. Второй запуск цветного вывода дал мне:

real    0m0.409s
user    0m0.256s
sys     0m0.120s

Мне не удалось полностью очистить кеш, чтобы обеспечить воспроизведение результата «более 90 секунд». В vm.drop_caches sysctl, как описано в https://stackoverflow.com/questions/599719/how-to-clean-caches-used-by-the-linux-kernel было недостаточно.

Попробуйте выполнить ls с помощью * s, чтобы перечислить только определенные вещи и посмотреть, какие комбинации медленные.

Некоторые цветовые конфигурации выглядят глупо и читаются в файле содержание. Проверьте свою конфигурацию. Я использую раскрашенные ls, но только так, чтобы lstat предоставлял всю необходимую информацию.