VPS

⌘K
  1. Home
  2. VPS
  3. Ubuntu
  4. Apache, PHP এবং phpMyAdmi...
  5. 5.PHP-FPM Performance Optimization for Laravel

5.PHP-FPM Performance Optimization for Laravel

চমৎকার! আপনি এখন যাচ্ছেন Laravel এর জন্য সবচেয়ে গুরুত্বপূর্ণ অপ্টিমাইজেশন ধাপে — PHP-FPM এবং Opcache Deep Optimization। এই ধাপে আমরা শুধুমাত্র কীভাবে কনফিগার করবেন তা-ই নয়, বরং প্রতিটি লাইন, কমান্ড ও কনফিগের পিছনে বাস্তব ব্যাখ্যা, উদ্দেশ্য ও প্রফেশনাল context দেখাবো যেন Laravel স্কেল করে 1000+ রিকোয়েস্ট অনায়াসে হ্যান্ডেল করতে পারে।


🧱 OBJECTIVE (লক্ষ্য):

Laravel কে এমনভাবে সার্ভারে অপ্টিমাইজ করা যেন:

  • ⏱️ দ্রুত response time দেয়
  • 🧠 বেশি concurrent requests হ্যান্ডেল করতে পারে
  • 🧰 memory leak / process overload না হয়
  • 💥 Laravel queue/session/cache Redis দিয়ে efficiently চলে

🔰 PART 2.A: PHP-FPM Optimization (Deep Practical Guide)


📌 STEP 1: আপনার সার্ভারে মোট RAM ও Core চেক করুন

free -m
lscpu

উদাহরণ output:

              total        used        free      shared  buff/cache   available
Mem:           7862         643        5212          29        2006        6912
CPU(s):              4
Model name:          Intel Xeon CPU

👉 এটা জানার মাধ্যমে আপনি বুঝতে পারবেন আপনার সার্ভার কতটা PHP worker চালাতে পারবে।


🧪 STEP 2: PHP-FPM Config ফাইল লোকেট করুন

Laravel এর জন্য PHP-FPM ব্যবহার হয়। PHP-FPM এর Pool config ফাইল সাধারণত এখানে থাকে:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

📂 /etc/php/8.2/fpm/pool.d/ → Pool config directory
📝 www.conf → default pool file যেখানে PHP worker behavior define করা হয়


🔧 STEP 3: Process Manager কনফিগার করুন

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

🔍 ব্যাখ্যা (Engineer-Level):

Parameterউদ্দেশ্য
pm = dynamicLaravel app এর ট্রাফিক অনুযায়ী worker auto scale করবে
pm.max_children = 50সর্বোচ্চ একসাথে ৫০টি PHP প্রক্রিয়া চলবে — এটাই আপনার RAM অনুযায়ী টিউন করতে হবে
pm.start_servers = 10সার্ভার start এর সময় শুরুতে ১০টি worker চালু থাকবে
pm.min_spare_servers = 5idle অবস্থায় কমপক্ষে ৫টি worker standby থাকবে
pm.max_spare_servers = 20idle অবস্থায় সর্বোচ্চ ২০টি worker standby থাকবে
pm.max_requests = 500এক worker ৫০০টি request সার্ভ করার পর reset হবে (memory leak রোধে)

🧠 Formula: pm.max_children নির্ণয়

pm.max_children = (Total PHP available RAM) / (Average PHP Memory Per Request)

উদাহরণ:

  • Total PHP RAM = 2GB = 2048MB
  • Average Memory = 20MB
pm.max_children = 2048 / 20 = 102

🎯 সাধারণভাবে:

RAMSuggested pm.max_children
2GB40–60
4GB80–100
8GB120–160

🧪 STEP 4: PHP-FPM Log ও Status চেক

Worker Status চালু রাখতে চান?

pm.status_path = /status
sudo systemctl restart php8.2-fpm

Nginx Config এ যুক্ত করুন (অপশনাল)

location ~ ^/(status|ping)$ {
    access_log off;
    allow your.ip.address;
    deny all;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

🔁 STEP 5: Restart PHP-FPM

sudo systemctl restart php8.2-fpm

🔥 PART 2.B: Opcache Optimization (Deep Explanation)


🎯 লক্ষ্য:

Laravel 10/11 এর মতো বড় ফ্রেমওয়ার্কে হাজার হাজার PHP ফাইল থাকে। প্রতিবার রিকোয়েস্টে এগুলোর প্রতিটি compile হলে response time অনেক বেড়ে যায়।

Opcache এগুলিকে compile করে RAM-এ রাখে। এতে response 3x–5x দ্রুত হয়।


📁 STEP 1: Opcache Config ফাইল খুলুন

sudo nano /etc/php/8.2/fpm/conf.d/10-opcache.ini

🔧 STEP 2: Laravel জন্য টিউন করুন

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.save_comments=1
opcache.jit=1205
opcache.jit_buffer_size=64M

🔍 ব্যাখ্যা:

Parameterব্যাখ্যা
memory_consumption=256Opcache এর জন্য 256MB allocate (default 128MB)
interned_strings_buffer=16frequently-used strings RAM-এ রাখে
max_accelerated_files=20000Laravel এর জন্য অনেক ফাইল থাকে (>=10k)
revalidate_freq=60প্রতি 60 সেকেন্ড পর ফাইল চেক করে চেঞ্জ হয়েছে কিনা
validate_timestamps=1Laravel dev এ 1, prod এ 0 রাখা ভালো
save_comments=1PHPDoc comments রাখে (যদি package use করে)
jitJust-In-Time compile করে আরও দ্রুত response দেয়
jit_buffer_size=64MJIT জন্য buffer (>= Laravel 9 support)

🔁 STEP 3: Restart করুন

sudo systemctl restart php8.2-fpm

🔍 STEP 4: Opcache তথ্য চেক করুন

php -i | grep opcache

📊 PART 2.C: Laravel Config সেটআপ

APP_ENV=production
APP_DEBUG=false
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
OPCACHE_ENABLE=true

✅ PART 2 SUMMARY CHECKLIST

Componentঅপ্টিমাইজ হয়েছে?
PHP-FPM Dynamic Worker
pm.max_children tuned
Opcache RAM boosted
Opcache + JIT + accelerated files
Laravel .env tuned

How can we help?