Ресурсы и производительность
Что потребляет S5W, от чего это зависит и какими переменными это регулируется. Значения по умолчанию рассчитаны на небольшой сервер; под нагрузку их поднимают.
Память
В контейнере работают 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 КиБ.