Существует две причины lsof | wc -l
не считает дескрипторы файлов. Каждый - это, это перечисляет вещи, которые не являются открытыми файлами, такими как загруженные динамически подключаемые библиотеки и текущие рабочие каталоги; необходимо фильтровать их. Другой - это lsof
занимает время для выполнения, так может пропустить файлы, которые открыты или закрыты, в то время как это работает; поэтому количество перечисленных открытых файлов приблизительно. Взгляд на /proc/sys/fs/file-nr
дает Вам точное значение в конкретном моменте времени.
cat /proc/sys/fs/file-nr
только полезно, когда Вам нужно точное число, главным образом для проверки на исчерпание ресурса. Если Вы хотите перечислить открытые файлы, необходимо звонить lsof
, или используйте некоторый эквивалентный метод, такой как траление /proc/*/fd
вручную.
Информация процесса хранится динамично системой в каталогах под/proc. Например, процесс с PID 1234 будет иметь каталог названным/proc/1234.
Существует довольно мало информации там, но прямо сейчас Вы интересуетесь/proc/1234/fd подкаталогом.
Примечание: У Вас должны быть корневые полномочия просмотреть или открыть файлы для процессов, которыми Вы не владеете, а также для процессов SetUID.
Пример:
root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]
root@johan-HP:/proc# cat 2443/fdinfo/2
pos: 1244446
flags: 0102001
Также взгляните на остальную часть файлов под/proc... большая полезная информация от системы находится здесь.
/proc/*/fd
каталоги содержат символьные ссылки на открытые файлы. Для визуального контроля использоватьls -l
. Для автоматизированной обработки использоватьreadlink
извлечь цель ссылки. – Gilles 'SO- stop being evil' 27.02.2013, 03:44setrlimit
(системный вызов, лежащий в основеulimit
окружите команду), для каждого процесса. Они влияют только на процесс, который выполняет вызов (и косвенно процессы что это более поздние ветвления). – Gilles 'SO- stop being evil' 19.05.2015, 15:51