Если я прочитал таблицу данных правильно, Вам заполнили один слот, шесть ядер, которые показывают 12 процессорами, потому что они - гиперпоточность. (Кроме того,/proc/cpuinfo должен сказать Вам о процессоре и физическом идентификаторе. Две части ядра гиперпоточности имеют тот же физический идентификатор.)
Это походит на хорошее чтение по вопросу.
Если Вы не можете уничтожить свое приложение, можно усечь вместо того, чтобы удалить файл журнала для освобождения пространства. Если файл не был открыт в, добавляют режим (с O_APPEND
), затем файл будет казаться столь же большим как перед следующим разом, когда приложение пишет в него (хотя с ведущей ролью, редкой и смотрящей, как будто он содержал байты NUL), но пространство будет освобождено (который не относится к HFS + файловые системы на Apple OS/X, которые не поддерживают редкие файлы хотя).
Усекать его:
: > /path/to/the/file.log
Если это было уже удалено на Linux, можно все еще усечь его путем выполнения:
: > "/proc/$pid/fd/$fd"
Где $pid
идентификатор процесса процесса, которому открыли файл, и $fd
один дескриптор файла, под которым этому открыли его (с которым можно свериться lsof -p "$pid"
.
Если Вы не знаете pid и ищете удаленные файлы, можно сделать:
lsof -nP | grep '(deleted)'
lsof -nP +L1
, как упомянуто @user75021 еще лучшее (более надежный и более портативный) опция (файлы списка, которые имеют меньше чем 1 ссылку).
Или (на Linux):
find /proc/*/fd -ls | grep '(deleted)'
Или найти большие с zsh
:
ls -ld /proc/*/fd/*(-.LM+1l0)
Альтернатива, если приложение динамично связано, должна присоединить отладчик к нему и заставить его звонить close(fd)
сопровождаемый новым open("the-file", ....)
.
Именно до драйвера файловой системы к на самом деле освобождают выделенное место и будет обычно происходить только, после того как все дескрипторы файлов, относящиеся к тому файлу, выпущены. Таким образом, Вы не можете действительно освободить пространство, если Вы не подаете заявку закрыть файл. Что означает или завершение его или проигрывание с ним "немного" в отладчике (например, закрытие файла и проверка, что это не открывается/пишется снова, или открытие /dev/null
вместо этого). Или Вы могли взломать ядро, но я отговорю от этого.
При усечении файла, поскольку предлагает Stephane, мог бы помочь, но реальный результат будет также зависеть от файловой системы (например, предварительно выделенные блоки будут, вероятно, освобождены только после закрытия файла в любом случае).
Объяснение позади этого поведения - то, что ядро не знало бы, что сделать с запросами данных (и чтение и запись, но чтение на самом деле более очень важно), предназначение для такого файла.
fallocate
на Linux 4.9. Можно ли разъясниться под тем, какая файловая система и условие, усекающее файл, не освобождают пространство?
– Stéphane Chazelas
03.05.2017, 14:52
] Проверьте здесь быстрый старт: [][]lsof[
] Quickstart[][
]Удивительно, что никто не упомянул о файле lsof quickstart (входит в комплект поставки lsof). В разделе "3.a" показано, как найти открытые, несвязанные файлы:[
] [lsof -a +L1 *mountpoint*
]
[]Например:[
] [[root@enterprise ~]# lsof -a +L1 /tmp
COMMAND PID USER FD TYPE DEVICE SIZE NLINK NODE NAME
httpd 2357 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
mysqld 2588 mysql 4u REG 253,17 52 0 1495 /tmp/ibY0cXCd (deleted)
mysqld 2588 mysql 5u REG 253,17 1048 0 1496 /tmp/ibOrELhG (deleted)
mysqld 2588 mysql 6u REG 253,17 0 0 1497 /tmp/ibmDFAW8 (deleted)
mysqld 2588 mysql 7u REG 253,17 0 0 11387 /tmp/ib2CSACB (deleted)
mysqld 2588 mysql 11u REG 253,17 0 0 11388 /tmp/ibQpoZ94 (deleted)
httpd 3457 root 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8437 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8438 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8439 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8440 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8441 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8442 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8443 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 8444 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 16990 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 19595 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 27495 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 28142 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
httpd 31478 apache 29u REG 253,17 3926560 0 1499 /tmp/.NSPR-AFM-3457-9820130.0 (deleted)
]
[]На системах Red Hat, чтобы найти локальную копию файла быстрого запуска, я обычно это делаю:[
] [[root@enterprise ~]# locate -i quickstart |grep lsof
/usr/share/doc/lsof-4.78/00QUICKSTART
]
[]..... или это:[
] [[root@enterprise ~]# rpm -qd lsof
/usr/share/doc/lsof-4.78/00.README.FIRST
/usr/share/doc/lsof-4.78/00CREDITS
/usr/share/doc/lsof-4.78/00DCACHE
/usr/share/doc/lsof-4.78/00DIALECTS
/usr/share/doc/lsof-4.78/00DIST
/usr/share/doc/lsof-4.78/00FAQ
/usr/share/doc/lsof-4.78/00LSOF-L
/usr/share/doc/lsof-4.78/00MANIFEST
/usr/share/doc/lsof-4.78/00PORTING
/usr/share/doc/lsof-4.78/00QUICKSTART
/usr/share/doc/lsof-4.78/00README
/usr/share/doc/lsof-4.78/00TEST
/usr/share/doc/lsof-4.78/00XCONFIG
/usr/share/man/man8/lsof.8.gz
]
truncate
команда, которая делает то же самое более явно. – Tobu 20.03.2013, 11:15lsof
вероятно, будет самым близким к портативному решению, которое можно получить для списка открытых файлов. подход отладчика для закрытия fd под ногами приложения должен быть довольно портативным также. – Stéphane Chazelas 20.03.2013, 15:50df -k | awk 'NR>1 { print $NF }' | xargs fuser -Vud
(и затем легкий отправить сигналы преступникам вынудить их выпустить fd) – Olivier Dulac 20.03.2013, 20:56lsof +L1
. Из lsof страницы справочника: "Спецификация формы+L1
выберет открытые файлы, которые были несвязанными. Спецификация формы+aL1 <file_system>
выберет несвязанные открытые файлы в указанной файловой системе. ". Это должно быть немного более надежно, чем захват. – Synchro 23.10.2014, 09:26