Это нормально для тысяч файлов, которые открываются программами Ubuntu?
Использовав lsof
Как было предложено в Слишком много открытых файлов - как найти виновника, я обнаружил, что тысячи файлов открыты из-за программ в стиле операционной системы, таких как unity-2d-
, gnome-do
, а также nautilus
, Только одна из 50 лучших - это программа в стиле приложения (Firefox).
lsof | perl -lane '$x{"$F[0]:$F[1]"}++;
END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}' | tail -50
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /var/lib/lightdm/.gvfs
Output information may be incomplete.
216 unity-2d-:26285
216 unity-2d-:31600
216 unity-2d-:2577
239 nautilus:30626
239 nautilus:3777
239 nautilus:31250
239 nautilus:30781
239 nautilus:15101
241 nautilus:26123
241 nautilus:20495
241 nautilus:9627
241 nautilus:31612
241 nautilus:26298
243 nautilus:7672
243 nautilus:603
243 nautilus:21594
243 nautilus:2590
243 nautilus:17574
243 firefox:9768
243 nautilus:12422
247 nautilus:14265
256 gnome-do:31632
256 gnome-do:20519
256 gnome-do:26318
256 gnome-do:9647
256 gnome-do:26143
257 gnome-do:12437
257 gnome-do:14284
257 gnome-do:21612
257 gnome-do:622
257 gnome-do:7686
257 gnome-do:2608
257 gnome-do:17603
270 unity-2d-:3756
270 unity-2d-:30612
272 unity-2d-:15087
277 unity-2d-:12408
277 unity-2d-:21580
278 unity-2d-:2576
278 unity-2d-:14251
278 unity-2d-:587
279 unity-2d-:9613
279 unity-2d-:30768
279 unity-2d-:20481
280 unity-2d-:26109
281 unity-2d-:26284
283 unity-2d-:31599
284 unity-2d-:31235
288 unity-2d-:7658
290 unity-2d-:17559
Это нормально или что-то не так?
1 ответ
Да, это нормально. Операционная система может иметь тысячи файлов, открытых одновременно в любой момент. Например, на данный момент в моей системе открыто 5858 файлов.
$ lsof | wc -l
5858
Обратите внимание, что lsof
по умолчанию список всех файлов, открытых всеми процессами. Таким образом, если к файлу обращаются два разных процесса, в выводе lsof будет два разных экземпляра.
Также обратите внимание, что файл не все обычные файлы. Руководство Lsof говорит
Открытый файл может быть обычным файлом, каталогом, специальным файлом блока, специальным символьным файлом, исполняемой текстовой ссылкой, библиотекой, потоковым или сетевым файлом (интернет-сокет, файл NFS или сокет домена UNIX.) файл или все файлы в файловой системе могут быть выбраны путем.
Но есть небольшая разница в открытых файлах и дескрипторах открытых файлов. Смотрите эту статью, чтобы прочитать эту интересную тему. Важным моментом является
Что такое открытый файл?
Открытый файл - это файл, который используется, или это дескриптор открытого файла? Файловый дескриптор - это структура данных, используемая программой для получения дескриптора файла, наиболее известным из которых является 0,1,2 для стандартного входа, стандартного выхода и стандартной ошибки. Параметр ядра file-max ссылается на дескрипторы открытых файлов, а file-nr дает нам текущее количество дескрипторов открытых файлов. Но lsof перечисляет все открытые файлы, включая файлы, которые не используют дескрипторы файлов, такие как текущие рабочие каталоги, файлы библиотеки с отображением в памяти и исполняемые текстовые файлы. Чтобы проиллюстрировать это, давайте рассмотрим разницу между выводом lsof для данного pid и файловыми дескрипторами, перечисленными для этого pid в / proc.
Также посмотрите на эти ссылки