Tmpfs для временных файлов: что выбрать и чем рискуете
Tmpfs ускоряет работу с временными файлами, но хранит данные в памяти и может конкурировать за неё с приложениями. Сравниваем tmpfs, обычный диск и ramfs, чтобы выбрать вариант без сюрпризов при нехватке памяти и перезагрузке.

Если приложение активно пишет временные файлы, tmpfs может убрать лишние операции с диском. Но за скорость вы платите памятью: при заполнении файловой системы или нехватке RAM приложение получит ошибку либо система начнёт активнее использовать swap. Выбор между tmpfs, диском и ramfs зависит не только от скорости, но и от размера данных, требований к сохранности и поведения при нагрузке.
Что именно сравниваем
Tmpfs — файловая система Linux, содержимое которой хранится в виртуальной памяти. Это не отдельный «диск в RAM»: страницы tmpfs могут вытесняться в swap, если он доступен. После размонтирования или перезагрузки файлы пропадают. Поэтому tmpfs подходит для данных, которые можно создать заново, но не для единственной копии важной информации.
У tmpfs часто используют каталог /dev/shm для временного обмена данными между процессами. Он обычно уже смонтирован системой. Это не означает, что любое приложение автоматически получит достаточно места: размер и доступные ресурсы зависят от настроек и окружения.
Термин. Виртуальная память — механизм, через который Linux управляет физической RAM и, при наличии, swap. Поэтому размер tmpfs не равен гарантированно зарезервированному объёму оперативной памяти.
Три варианта и цена каждого
| Вариант | Что выигрываете | Чем платите | Когда выбирать |
|---|---|---|---|
| Tmpfs | Быстрый доступ без обычной записи временных данных на диск; файлы доступны как каталог. | Память общая с системой; данные исчезают при размонтировании и перезагрузке; можно упереться в лимит. | Для кэшей, промежуточных результатов и временных файлов ограниченного размера. |
| Обычная файловая система на диске | Большой объём и сохранность после перезапуска в пределах выбранной политики хранения. | Нагрузка на накопитель и задержка ввода-вывода; временные файлы нужно удалять или ограничивать. | Для крупных файлов, долгих задач и данных, которые нельзя потерять при рестарте. |
| Ramfs | Файлы тоже находятся в памяти и доступны через файловый интерфейс. | У ramfs нет механизма ограничения размера, аналогичного лимиту tmpfs: рост может исчерпать память. | Редкие специализированные сценарии, где размер контролируется извне и последствия понятны. |
Для большинства прикладных задач сравнивать нужно прежде всего tmpfs и диск. Ramfs — не «более быстрый tmpfs», который стоит выбрать по умолчанию: отсутствие встроенного лимита делает его опасным для неконтролируемого роста данных.
Tmpfs не создаёт дополнительную память. Он меняет место и способ хранения временных файлов, но конкурировать за ресурсы всё равно будет со всем остальным процессом.
Как принять решение
Оцените размер и срок жизни файлов
Измерьте не средний, а пиковый объём временных данных за один цикл работы приложения. Учтите параллельные запросы, несколько одновременно работающих процессов и временные всплески. Если каждый запрос создаёт файл размером 20 МБ, а одновременно обрабатываются десятки запросов, небольшой лимит tmpfs может закончиться раньше, чем вы заметите рост нагрузки.
Проверьте, как приложение реагирует на невозможность создать файл или записать в него. Ошибка записи может сорвать отдельный запрос, задание очереди или весь пакетный запуск. Рассчитывать только на автоматическое удаление старых файлов нельзя, если само приложение такой гарантии не даёт.
Сверьте данные с требованиями к сохранности
Если файл нужен после перезагрузки, аварийного завершения или переноса задачи на другой сервер, tmpfs не подходит как единственное место хранения. Сохраняйте результат на обычную файловую систему или в подходящее внешнее хранилище, а tmpfs используйте только как рабочую область. Для воспроизводимого кэша потеря обычно означает повторное вычисление; для пользовательской загрузки — потерю данных.
Задайте лимит и наблюдайте за заполнением
При подключении tmpfs задавайте максимальный размер с учётом памяти, доступной именно на этом хосте. В документации ядра указано, что размер по умолчанию — 50% физической RAM, если он не задан отдельно. Это верхняя граница файловой системы, а не обещание свободной памяти: несколько tmpfs и обычные процессы могут одновременно расходовать общий ресурс.
Проверяйте заполнение точки монтирования и доступную память в типичных и пиковых сценариях. В мониторинг стоит добавить использование tmpfs, ошибки записи и давление на память; отдельно следите за swap, если он включён. Один только график свободного места на диске не покажет, что процессам уже тесно в RAM.
Где подход ломается
- Лимит слишком мал. Запись завершается ошибкой при всплеске нагрузки. Увеличьте лимит только после оценки памяти хоста либо перенесите крупные файлы на диск.
- Лимит слишком велик. Он не резервирует память заранее, но позволяет tmpfs разрастись до опасного размера. При конкуренции с приложениями возможны swap и нехватка памяти.
- Ожидается сохранность после рестарта. Файлы tmpfs пропадут. Проверьте, что приложение может их пересоздать или сохраняет результат в другом месте.
- В tmpfs попадают большие или непредсказуемые файлы. Их размер может превратить временную файловую систему в потребителя основной части памяти. Ограничьте входные данные и параллелизм или выберите диск.
- Проверка проведена только без нагрузки. Пиковый объём появляется при одновременной работе задач. Тестируйте с реалистичной параллельностью и контролируйте состояние системы.
Инвалидация кэша и очистка временных файлов — отдельные задачи: tmpfs сам по себе не определяет, когда приложение должно удалить ненужные данные.
Что выбрать на практике
Берите tmpfs, если файлы временные, их объём можно оценить и потеря означает только повторное создание. Оставляйте диск, если объём велик, неизвестен заранее или данные должны пережить перезапуск. Ramfs выбирайте только при чётком внешнем контроле размера и обоснованной необходимости.
Перед запуском в проде проведите нагрузочный тест с ожидаемым пиковым числом задач. Зафиксируйте максимальное заполнение tmpfs, доступную память, использование swap и поведение приложения при отказе записи. Затем задайте лимит с запасом, который не лишает памяти остальные процессы, и проверьте сценарий перезапуска.
Что делать дальше
Сначала измерьте объём временных файлов на текущем диске и определите, какие из них приложение может безопасно пересоздать. После этого испытайте tmpfs на тестовом окружении с тем же числом параллельных задач, что ожидается в проде. Если приложение хранит там единственную копию результата, сначала измените путь сохранения: одна только настройка tmpfs этот риск не устранит.
Проверка рекламы на риски: Что в макете вызовет вопросы ФАС: превосходные степени, сравнения, обещания результата, маркировка.
Спросить за 40 ₽Источники: Документация ядра Linux: tmpfs, Документация ядра Linux: виртуальная память
Частые вопросы
Tmpfs действительно хранит всё только в оперативной памяти?
Файлы в tmpfs останутся после перезагрузки?
Что будет, если tmpfs заполнится?
Tmpfs быстрее обычного диска?
Чем tmpfs отличается от ramfs?
Какой размер tmpfs поставить для сервера?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.