Nginx удаленный файл все еще скачивает

Сценарий:

  • Создайте случайный файл (в данном случае 1024M) dd if=/dev/zero of=file bs=1M count=1024
  • Инициировать загрузку (curl src > /dev/null)
  • Удалить файл с сервера
  • Керл еще скачивает 100%, 1024M

Как это возможно, если файл удален на сервере?

Сервер имеет 512M RAM и нет SWAP, файл не может быть прочитан все в RAM. Таким образом, он должен был прочитать с диска в какой-то момент. Тем не менее, файл перестал существовать в середине загрузки, так почему же nginx все еще позволяет людям продолжать загрузку?

2 ответа

Решение

После начала загрузки веб-сервер открывает исходный файл и не закрывает его, пока не будут отправлены все данные. Удаление файла не остановит процесс, у которого файл открыт для чтения и записи в него. Только когда процесс закроет файл, он будет удален ядром.

True: блоки данных (и индекс) освобождаются, когда счетчик ссылок получает 0 И ни один процесс не имеет открытого файла.

Другие вопросы по тегам