Размер каталога (как замечено с ls -ld /var/lib/php/sessions
) может дать признак. Если это является маленьким, нет многих файлов. Если это является большим, там может быть много записей, или в прошлом, возможно, были многие.
Список содержания, пока Вы не делаете stat
отдельные файлы, не должен брать намного намного дольше, чем чтение файла тот же размер.
То, что могло бы произойти, - то, что у Вас есть псевдоним для ls
это делает ls -F
или ls --color
. Те опции вызывают lstat
системный вызов, который будет выполнен на каждом файле для наблюдения, например, если они - файл или каталог.
Вы также захотите удостовериться, что Вы перечисляете точечные файлы и что Вы оставляете список файлов неотсортированным. Для этого, выполненного:
command ls -f /var/lib/php/sessions | wc -l
Если не слишком много имен файлов имеют символы новой строки, которые должны дать Вам хорошую оценку.
$ ls -lhd 1
drwxr-xr-x 2 chazelas chazelas 69M Aug 15 20:02 1/
$ time ls -f 1 | wc -l
3218992
ls -f 1 0.68s user 1.20s system 99% cpu 1.881 total
wc -l 0.00s user 0.18s system 9% cpu 1.880 total
$ time ls -F 1 | wc -l
<still running...>
Можно также вывести количество файлов там путем вычитания количества уникальных файлов в другом месте в файловой системе от количества используемого inodes в выводе df -i
.
Например, если файловая система смонтирована на /var
, с GNU find
:
find /var -xdev -path /var/lib/php/sessions -prune -o \
-printf '%i\n' | sort -u | wc -l
Найти количество файлов не в/var/lib/php/sessions. Если Вы вычитаете это к IUsed
поле в выводе df -i /var
, Вы получите приближение (потому что некоторые специальные inodes не связаны ни с каким каталогом в типичной файловой системе расширения) количества файлов, связанных с /var/lib/php/sessions
это иначе не связано больше нигде (обратите внимание, что/var/lib/php/sessions мог очень хорошо содержать один миллиард записей для того же файла (хорошо на самом деле, максимальное количество ссылок на файл будет намного ниже, чем это в большинстве файловых систем), так, чтобы метод не был надежным).
Обратите внимание, что при чтении содержания каталога должно быть относительно быстрым, удаление файлов может быть крайне медленным.
rm -r
, когда удаление файлов, первые списки содержание каталога, и затем звонит unlink()
для каждого файла. И для каждого файла, система имеет к поиску файл в том огромном каталоге, который, если это не хешируется, может быть очень дорогим.
READ будет блокировать, пока данные не будут доступен, и напишите заблокируют или выйдут, чтобы пройти полную трубу. Там мало параметров, таких как Pipe_buf , Pipe_size и O_NONBLOCK , которые играют ключевую роль в трубе.
Значение PIPE_BUF можно определить через «Ulimit -a». Это определено в пределах. Pipe_buf управляет гарантированным размером для атомных напитков . Это помогает в создании безопасных многопоточных приложений.
Pipe_size зависит от размера страницы. В 2,4 ядре он был эквивалентен размеру одной страницы (4 КБ). Однако версии после 2,6 сопоставлены на массив 16 страниц (64 КБ). Это определяется в файле Pipe_fs_i.h Как Pipe_Buffers (16). Последние версии ядра имеют FCNTL с F_SetPipe_SZ Включить увеличение размера страницы.
О O_NONBLOCK позволяет выполнять частичные и отложенные записи. Тем не менее, если O_NONBLOCK включен, но если количество байтов будет записано в трубе, больше, чем Pipe_buf, то запись не пройдет неудачу в трубу, если они заполнены, остальные на основе возвращаемого значения записи, он будет перемежен с данными из других процессов. Отказ
Нет, он не загружает все в память, это было бы непрактично. Он использует буферы для буферизации вывода с левой стороны трубы, а затем подключает эти буферы к входу команды с правой стороны трубы.
В man-странице man 7 pipe
есть все подробности, также как и в другом U&L Q&A под названием: Насколько велик буфер трубы?
Попробуйте использовать опцию -B
, она использует только 64k буфер.
cat /dev/sda1 | less -B
Из man less
:
-B или --auto-buffers По умолчанию, когда данные читаются из трубы, буферы выделяются автоматически по мере необходимости. Если из трубы считывается большое количество данных, это может привести к выделению большого объема памяти. выделение. Опция -B отключает автоматическое выделение буферов для труб, так что для трубы будет использоваться только 64K (или объем пространства, указанный опцией -b). Предупреждение: использование опции -B может привести к ошибочному отображению, так как в памяти сохраняется только самая последняя просмотренная часть файла; все более ранние данные теряются.