Развёртывание · s5w

Ресурсы и производительность

Что потребляет S5W, от чего это зависит и какими переменными это регулируется. Значения по умолчанию рассчитаны на небольшой сервер; под нагрузку их поднимают.

Память процесса до 512 МиБТело запроса до 32 МиБЗапас диска 512 МиБ

Память

В контейнере работают PostgreSQL и несколько процессов приложения: супервизор, процесс обработки HTTP-запросов, планировщик и панель. В простое процессы приложения занимают около 200 МБ.

Основной расход — обработка запросов под нагрузкой. Часть загрузки и обработка картинки — это мегабайты в памяти, поэтому у процесса потолок 512 МиБ (SERVER_MEMORY_LIMIT). Для небольшого сервера достаточно 2 ГБ оперативной памяти; оставляйте место для PostgreSQL и страничного кэша ОС — он ускоряет раздачу часто запрашиваемых файлов.

Предупреждение при старте

Если у контейнера задан лимит памяти (--memory, mem_limit) и потолок памяти приложения в него не помещается, приложение пишет в лог предупреждение Memory over-commit с расчётом. Запуск оно не блокирует — это оценка худшего случая.

SERVER_MEMORY_LIMIT

Что делает. Потолок памяти одного процесса приложения, в формате PHP: 512M, 1G.

По умолчанию — 512M. Меньше ставить не стоит: часть загрузки до 16 МиБ и обработка картинки до 25 мегапикселей требуют запаса.

Что будет при превышении. Запрос, который упёрся в потолок, завершается ошибкой, а процесс перезапускается — остальные части сервиса продолжают работать.

Не ставьте -1

-1 не снимает ограничение, а переносит его на ядро ОС: при перерасходе процесс убьёт OOM killer — без записи в лог и, возможно, вместе со всем контейнером. Приложение предупредит об этом при старте.

SERVER_REQUEST_TIMEOUT

Что делает. Сколько секунд запрос может ждать, прежде чем сервер его прервёт. Прерванный запрос получает 504, а начатые им операции корректно закрываются.

По умолчанию — 30. 0 — без ограничения.

Что не прерывает. Медленную отдачу файла: скачивание большого файла по медленному каналу таймаутом не обрывается. Таймаут защищает от запросов, которые зависли в ожидании.

Когда менять. Почти никогда. Если клиенты загружают части по очень медленному каналу и получают 504, поднимите значение или уменьшите размер части на клиенте.

Размер запроса

Что Предел Что будет сверх него
Тело одного запроса к приложению 32 МиБ 413, тело не принимается
Файл одним запросом POST /v1/files около 32 МиБ вместе с полями формы 413
Часть загрузки 4–16 МиБ 400 / 413 с объяснением

Предел 32 МиБ встроен и не настраивается: файлы больше загружаются частями. Панель делает это сама для файлов больше 16 МиБ.

Прокси перед сервисом должен пропускать тело не меньше 32 МиБ — см. За обратным прокси.

Диск

  • Файлы занимают ровно столько, сколько уникального содержимого: дубликаты места не расходуют.
  • Загрузки частями во время передачи лежат в staging/ — столько, сколько уже получено. Брошенные удаляются через 24 часа после последней части.
  • Запас 512 МиБ. Загрузка частями не начнётся, если после неё на диске останется меньше 512 МиБ: ответ 507. Это защищает базу — PostgreSQL на переполненном диске останавливается.
  • База обычно мала по сравнению с файлами: метаданные и статистика по дням за год.

Следите за свободным местом на томе извне — см. мониторинг.

Процессор

Основная нагрузка на процессор — подсчёт SHA-256 при загрузке и обработка картинок. Раздача файлов процессор почти не тратит. Сжатие ответов API включено для текстовых ответов от 1 КиБ.