5

У меня есть приложение Java (да Java ...), работающие на CentOS 7. Через некоторое время меня "беспокоит" множество "удаленных" файлов.

для удаленных файлов используется (не проблема):

lsof | grep "(deleted)"

Я нашел их в /proc /pid /fd /... и у меня вопрос, как я могу убить /удалить их, не убивая процесс (процесс должен запускаться 24/7).

Я видел в Google, что я могу использовать инструмент GDB, но я не знаю, как его использовать. Можете ли вы помочь мне (просто написать пошаговое руководство)?

Я буду рад услышать некоторые другие предложения, если у вас есть.

1 ответ1

7

используйте lsof -p $PID и найдите дескриптор файла (4-й столбец)

root@blah:~# lsof -p 1737 | grep "(deleted)" apache2 1737 root 6w REG 0,25 0 207401 (deleted)/var/log/apache2/other_vhosts_access.log

4-й столбец - 6w, означающий дескриптор файла 6, и он был открыт для записи (w).

Затем:

gdb -p $PID p close($FD)

например:

gdb -p 1737 ..... (gdb) p close(6) $1 = 0 ... Quit anyway? (y or n) y Detaching from program: /usr/lib/apache2/mpm-prefork/apache2, process 1737

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .