Во время диагностики производительности или тестирования файловой системы нередко встречаются рекомендации выполнить:
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
Эти команды часто используют вместе, однако они решают разные задачи. Чтобы понимать, когда их действительно стоит применять, важно разобраться, что происходит внутри ядра Linux.
Когда приложение записывает данные в файл, они обычно не сразу попадают на устройство хранения. Ядро сначала размещает их в
page cache, помечая соответствующие страницы как dirty. Это позволяет объединять множество небольших операций записи в более крупные и снижать количество обращений к диску.Проверить объём таких страниц можно командой:
grep -E "Dirty|Writeback" /proc/meminfo
Пример:
Dirty: 18432 kB
Writeback: 0 kB
Значение
Dirty показывает объём данных, ожидающих записи, а Writeback — объём страниц, которые в данный момент уже записываются фоновыми потоками ядра.Команда:
sync
не очищает
page cache и не освобождает память. Она инициирует запись всех изменённых страниц и метаданных файловой системы в нижележащее хранилище и завершается после окончания этих операций. Итоговые гарантии сохранности данных зависят от файловой системы, устройства хранения и его политики кэширования.Если в системе в этот момент нет новых операций записи, после выполнения
sync значение Dirty обычно становится близким к нулю.Команда:
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
работает иначе. Она освобождает объекты, которые ядро может безопасно восстановить при необходимости. Значение 1 очищает
page cache, 2 — кэш dentry и inode, а 3 очищает оба типа кэша одновременно.Поэтому на практике сначала выполняют:
sync
а затем:
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
Без предварительного
sync часть страниц может оставаться изменённой (dirty), и ядро не сможет освободить их до завершения записи.Проверить эффект можно с помощью:
grep -E "Cached|Buffers|SReclaimable|MemAvailable" /proc/meminfo
или:
free -h
При этом важно понимать, что уменьшение значения
Cached не означает сопоставимого увеличения MemAvailable. Page cache и без принудительной очистки автоматически освобождается ядром при возникновении нехватки памяти и является частью нормальной работы Linux.На практике
drop_caches используют в основном перед сравнительным тестированием производительности файловой системы, чтобы исключить влияние уже закэшированных данных. Для «очистки памяти» на рабочих серверах эта команда обычно не применяется, поскольку после удаления кэша системе потребуется заново считывать данные с устройства хранения, что зачастую приводит к временному снижению производительности.🔥
sync обеспечивает синхронизацию накопленных изменений с устройством хранения, а drop_caches освобождает восстанавливаемые структуры памяти. Эти механизмы предназначены для диагностики и тестирования, а не для регулярной оптимизации работы системы.🚪 Linux Ready | #практика