TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #6146 2.26K
📈 Почему память в PHP-воркерах только растёт — и это нормально

Если вы переходите с PHP-FPM на RoadRunner, Laravel Queue или Symfony Messenger — вы увидите один и тот же эффект:

Память растёт ступеньками и никогда не падает.
40 → 200 → 350 МБ… и так до перезапуска.
Unset, GC, collect_cycles() — не помогают.

Это не утечка. Это архитектура PHP.

🧬 Почему так происходит

PHP использует Zend Memory Manager:
он выделяет память крупными чанками (2–4 МБ) и не отдаёт их ОС назад, даже если внутри всё освобождено.

Каждый пик — новый baseline.
Обработали 100k записей → память выросла → процесс будет держать этот объём до конца жизни.

🔥 Что вызывает «разбухание»

ORM ->all() или ->get() на десятки тысяч записей

большой файл в file_get_contents()

накопление массивов

сложные eager-loading графы ORM

🛠 Как проектировать правильно


✔️ Стриминг вместо коллекций:
User::lazy()->each(fn($u) => processUser($u));


или:
Record::chunk(100, function ($rows) {
foreach ($rows as $r) processRecord($r);
});


✔️ Doctrine:
foreach ($q->toIterable() as $u) {
process($u);
$em->detach($u);
}


✔️ Изоляция тяжёлых операций в функцию — память освобождается при выходе из scope.

✔️ Ротация воркеров — обязательна:

Laravel:
php artisan queue:work --max-jobs=1000


RoadRunner:
pool:
max_jobs: 1000


Messenger:
messenger:consume --limit=1000


📌 Выводы

🔸 Память в долгоживущем PHP-процессе не уменьшится сама по себе.

🔸 Проектируйте под пиковое потребление.

🔸Используйте стриминг, чанки, detach().

🔸 Регулярно перезапускайте воркеры.

🔗 Medium

🐸 Библиотека пхпшника
  • 👍 14
  • ❤ 4
More from @phpproglib
  1. Sep 23, 2026🛠 Symfony 8.2 научился автоматически генерировать JSON Schema для конфигурации приложения…
  2. Sep 23, 2026🚀 Свежий релиз Laravel 13 с набором улучшений и исправлений ✅ добавлена поддержка valkey:…
  3. Sep 21, 2026⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta. Самые заметные изме…
  4. Sep 20, 2026❓ Какие существуют проблемы в многопоточной среде? Основные проблемы многопоточности: 1️⃣…
  5. Sep 19, 2026🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и C…
  6. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →