کاهش حافظه مصرفی php-fpm و MySQL

وقتی سروری دارید که حافظه اصلیش کمه و باید سرویس‌های مختلفی رو روی اون اجرا کنید تازه میفهمید که هرکدوم از سرویس‌ها چقدر حافظه مصرف میکنند و چجوری حافظه مصرفی رو کاهش بدید. وقتی با حافظه کم دارید از mysql و php-fpm استفاده می‌کنید بهتره سری به تنظیماتشون بزنید و چند تغییر کوچک توی اونها بدید تا حجم کمتری از حافظه اصلی رو اشغال کنند.

اول بریم سراغ php-fpm که اگه باعث میشه حافظه مصرفی به میزان چشمگیری کاهش پیدا بکنه. فایل /etc/php-fpm.d/www.conf رو با ویرایشگر دلخواه خودتون ویرایش کنید و تنظیمات زیر رو توی اون اعمال کنید.

1
2
3
4
5
6
7
8
; Change process manager from default (dynamic) to ondemand
pm = ondemand
; Maximum number of child processes
pm.max_children = 50
; The number of seconds after which an idle process will be killed.
pm.process_idle_timeout = 10s
; The number of requests each child process should execute before respawning.
pm.max_requests = 500

این تنظیمات باعث میشه که پروسس‌های php-fpm در مواقع نیاز(ondemand) ایجاد بشن و بعد از ۱۰ ثانیه بیکار بودن به دیار باقی منتقل بشن. با ایجاد این تغییرات و ریستارت سرویس php-fpm حجم قابل توجهی از حافظه‌ای که قبلا استفاده شده بوده آزاد میشه. چیزی نزدیک ۲۵۰مگ.
برای mysql هم باید سری به تنظیمات innodb بزنیم و اندازه حافظه مورد استفاده اون رو کاهش بدیم، بصورت پیش‌فرض این سرویس ۲۵۶ مگ رم میگیره، اگه فرض کنیم کل رم سرور شما ۵۱۲مگ باشه این میزان دقیقا نصف رم هست که خب این میزان چندان جالب نیست. فایل /etc/my.cnf رو باز کرده و مقدار کلید innodb_buffer_pool_size رو به میزان دلخواه تغییر بدید.

1
2
[mysqld]
innodb_buffer_pool_size = 64M

پس از این هم سرویس مای‌اس‌کیو‌ال رو ریستارت کنید.
در نهایت با استفاده از دستور free -m میتونید میزان حافظه در دسترس سرورتون رو ببینید.