Для оценки того, сколько памяти может потребоваться вашему приложению, можно использовать 2 подхода:

  • замер используемой памяти
  • ограничение памяти доступной приложению

Каждый имеет свои плюсы. Рассмотрим общие инструменты, независимые от языка, т.к. в том же PHP можно использовать memory_get_usage, xdebug с профилированием, и т.п.

Замер используемой памяти

Этот метод хорош, когда вы примерно знаете сценарий выполнения приложения и его время работы довольно ограничено. Из минусов - нельзя поймать все худшие сценарии или пики потребления памяти.

Используем программу GNU time. Не путайте его со стандартной командной bash, которая тоже называется time.

Устанавливаем программу:

sudo apt install time

Делаем единичный замер:

/usr/bin/time -f '%M' php test.php

На выводе получаем максимальное количество памяти в килобайтах, которое было задействовано во время выполнения скрипта. В это число входит размер самого бинарника приложения + то, что выделяется в куче + размер разделяемых библиотек.

Эта цифра иногда гуляет, в зависимости от характера самого скрипта. Даже при детерминированной программе, которая не зависит от внешних данных, разбег может быть в несколько килобайт при каждом запуске. Поэтому для более точного замера:

for i in 1 2 3 4 5 6 7 8 9 10; do /usr/bin/time -f '%M' php test.php > /dev/null; done

Ограничение памяти доступной приложению

Понадобится root доступ и дистрибутив, в котором есть systemd

sudo systemd-run --scope -p MemoryMax=38M user php test.php

В случае достижения потребления MemoryMax процесс просто будет убит.

Здесь память считается по-другому: размер бинарника + куча, разделяемые библиотеки не учитываются. Это следует помнить, если вы уже ориентируетесь на результат от GNU time.