چرا PHP-FPM دچار Memory Leak میشود؟

یکی از مشکلاتی که در سرورهای PHP ممکنه بعد از مدتی خودش رو نشون بده:
- مصرف RAM دائماً افزایش پیدا میکنه
- Processهای PHP-FPM حافظه زیادی میگیرن
- Performance سرور افت میکنه
- و در نهایت OOM Killer وارد عمل میشه!
اما همیشه مشکل از خود PHP نیست.
چند دلیل رایج:
🔹 کد یا مدیریت نادرست حافظه
استفاده نامناسب از متغیرهای global، static یا نگهداشتن دادههای حجیم.
🔹 Extensionهای PHP
گاهی یک extension دارای bug یا مشکل مدیریت حافظه است.
🔹 Resourceهای خارجی
مثل اتصالهای دیتابیس، فایلها یا Socketهایی که درست آزاد نمیشوند.
🔹 Requestهای سنگین
Loopهای بزرگ، پردازش فایل، Queryهای سنگین یا ساخت Objectهای زیاد.
🔹 Cacheهای حجیم
نگهداشتن آرایهها و دادههای بزرگ در حافظه بدون آزادسازی مناسب.
🔹 Bug در نسخه PHP یا PHP-FPM
گاهی مشکل واقعاً از یک bug شناختهشده در نسخه مورد استفاده است.
** از کجا بفهمیم مشکل کجاست؟ **
- مصرف Memory هر Worker را مانیتور کنید
- Requestهای سنگین را پیدا کنید
- Extensionها را بررسی کنید
- نسخه PHP و PHP-FPM را بهروز نگه دارید
- تنظیماتی مثل pm.max_children و pm.max_requests را متناسب با سرور تنظیم کنید.
یک نکته مهم:
`pm.max_requests` درمان Memory Leak نیست؛ بیشتر یک راهکار Mitigation است تا Workerهایی که به مرور حافظه بیشتری مصرف میکنند، بعد از تعداد مشخصی Request مجدداً ساخته شوند.
اگر با PHP-FPM کار میکنید،
بزرگترین Memory Leak که در پروژهتون دیدید چی بوده؟
#PHP #PHPFPM #Backend #Linux #DevOps #MemoryLeak #Performance #Programming