تنظیم منابع و Auto Tune در WordPress
در سرویس WordPress میتوانید منابع زمان اجرای PHP و وبسرور را از طریق متغیرهای محیطی سرویس تنظیم کنید. این مقادیر را در پنل سرویس وارد کنید؛ نیازی به تعریف آنها در wp-config.php نیست.
روش اعمال تنظیمات
این متغیرها را در پنل سرویس، از مسیر تنظیمات ← متغیرهای محیطی وارد کنید و تغییرات را ذخیره کنید. نام متغیرها به بزرگی و کوچکی حروف حساس است. راهنمای متغیرهای محیطی مراحل کار با پنل را توضیح میدهد.
تنظیمات هنگام شروع کانتینر خوانده میشوند. برای اعمال تغییرات، کانتینر باید با Environment جدید دوباره ساخته شود؛ ذخیرهٔ متغیرهای محیطی در پنل باعث استقرار مجدد سرویس میشود. نیازی به rebuild ایمیج نیست.
مقدار دستی هر متغیر بر مقدار محاسبهشدهٔ همان تنظیم اولویت دارد. تنظیمات دستی Apache، PHP-FPM و OPcache حتی با PHP_AUTO_TUNE=0 یا در نبود مقادیر منابع هم اعمال میشوند. خاموش کردن Auto Tune فقط محاسبهٔ خودکار را غیرفعال میکند.
تنظیم خودکار منابع (Auto Tune)
Auto Tune تنظیمات Apache، OPcache و، در ایمیجهای FPM، PHP-FPM را متناسب با CPU و RAM محاسبه میکند. این محاسبه فقط زمانی اجرا میشود که اطلاعات CPU و RAM اختصاصیافته به سرویس در دسترس باشد و PHP_AUTO_TUNE غیرفعال نشده باشد.
| متغیر | کاربرد و مقدار پیشفرض |
|---|---|
PHP_AUTO_TUNE | فعال یا غیرفعال کردن تنظیم خودکار؛ پیشفرض 1، برای غیرفعال کردن 0 |
PHP_WORKER_MEMORY_MB | تخمین RAM مصرفی هر PHP worker بر حسب MiB؛ پیشفرض 64 |
PHP_RUNTIME_RESERVE_MB | RAM رزروشده برای سایر پردازشها بر حسب MiB؛ پیشفرض بزرگترِ 48 و ۲۵٪ RAM |
واحد GB دهدهی با GiB متفاوت است: هر GB برابر با 1,000,000,000 بایت و هر MiB برابر با 1,048,576 بایت است. بنابراین ۰٫۱۵ GB حافظه به معنی ۱۵۰ میلیون بایت، حدود ۱۴۳ MiB، است.
ظرفیت PHP چگونه محاسبه میشود؟
ابتدا RAM رزروشده و حافظهٔ OPcache از RAM کل کم میشوند. ظرفیت حافظه از تقسیم RAM باقیمانده بر PHP_WORKER_MEMORY_MB و گرد کردن رو به پایین به دست میآید. سقف ظرفیت از نظر CPU برابر ceil(CPU × 2) است؛ یعنی حاصل دو برابر CPU به عدد صحیح بزرگتر گرد میشود. ظرفیت خودکار از این دو محدودیت محاسبه میشود و حداقل یک worker است.
مثلاً با یک هستهٔ CPU و یک GB حافظهٔ RAM، RAM کل حدود ۹۵۴ MiB است. با مقادیر پیشفرض، حدود ۲۳۸ MiB برای سایر پردازشها و حدود ۹۵ MiB برای OPcache در نظر گرفته میشود؛ RAM باقیمانده برای حدود ۹ worker با مصرف تخمینی ۶۴ MiB کافی است. سقف CPU برابر ceil(1 × 2) = 2 است، پس ظرفیت خودکار ۲ worker خواهد بود. این مثال تقریبی است و برای توضیح محدودیتهاست.
PHP_WORKER_MEMORY_MB فقط تخمین مصرف واقعی یک worker برای این محاسبه است و مقدار memory_limit در PHP را تغییر نمیدهد. اگر هر worker برنامهٔ شما حافظهٔ بیشتری مصرف میکند، این تخمین را متناسب با مصرف واقعی تنظیم کنید. حداقل یک worker نیز به معنی تضمین کافی بودن RAM برای اجرای برنامه نیست.
OPcache
| متغیر | کاربرد و پیشفرض هنگام Auto Tune |
|---|---|
PHP_OPCACHE_MEMORY_MB | حافظهٔ OPcache بر حسب MiB؛ ۱۰٪ RAM با حداقل 16 و حداکثر 256؛ مقدار دستی حداقل 8 |
PHP_OPCACHE_INTERNED_STRINGS_MB | حافظهٔ رشتههای اشتراکی بر حسب MiB؛ یکهشتم حافظهٔ OPcache با حداقل 1 و حداکثر 16 |
PHP_OPCACHE_MAX_FILES | تعداد فایلهای قابل کش؛ پیشفرض 10000 |
حافظهٔ رشتههای اشتراکی باید کمتر از حافظهٔ OPcache باشد؛ هنگام تنظیم دستی هر دو مقدار، این شرط را رعایت کنید.
فایل سفارشی 99-chabok-php.ini بر تنظیمات تولیدشدهٔ OPcache اولویت دارد. اگر تنظیم OPcache از طریق متغیر محیطی نتیجهٔ مورد انتظار را نداشت، وجود مقدار متناظر در این فایل را بررسی کنید.
Apache
متغیرهای مربوط به پردازشهای آماده در حالت prefork / mod_php و متغیر های thread در حالت event / FPM کاربرد دارند. تنظیمات را متناسب با حالت اجرای ایمیج انتخاب کنید.
| متغیر | کاربرد |
|---|---|
APACHE_SERVER_LIMIT | سقف تعداد پردازشهای Apache |
APACHE_START_SERVERS | تعداد پردازشهای اولیه |
APACHE_MAX_REQUEST_WORKERS | سقف درخواستهای همزمان |
APACHE_MAX_CONNECTIONS_PER_CHILD | تعداد اتصال پیش از بازسازی هر پردازش؛ پیشفرض خودکار 500؛ مقدار 0 یعنی نامحدود |
APACHE_MIN_SPARE_SERVERS | حداقل پردازشهای آماده در prefork / mod_php |
APACHE_MAX_SPARE_SERVERS | حداکثر پردازشهای آماده در prefork / mod_php |
APACHE_THREAD_LIMIT | سقف thread در هر پردازش در event / FPM |
APACHE_THREADS_PER_CHILD | تعداد thread هر پردازش در event / FPM |
APACHE_MIN_SPARE_THREADS | حداقل threadهای آماده در event / FPM |
APACHE_MAX_SPARE_THREADS | حداکثر threadهای آماده در event / FPM |
PHP-FPM
این متغیرها فقط در ایمیجهای *-fpm اعمال میشوند. انتخاب این متغیرها بهتنهایی حالت اجرای ایمیج را به FPM تغییر نمیدهد.
| متغیر | کاربرد و پیشفرض هنگام Auto Tune |
|---|---|
PHP_FPM_PM | یکی از static، dynamic یا ondemand؛ اگر RAM کمتر از 512 MiB یا CPU کمتر از یک هسته باشد، پیشفرض ondemand است؛ در غیر این صورت dynamic |
PHP_FPM_MAX_CHILDREN | سقف PHP workerها؛ محاسبه از محدودیت CPU و RAM |
PHP_FPM_START_SERVERS | تعداد workerهای اولیه در حالت dynamic؛ برابر حداقل workerهای آماده |
PHP_FPM_MIN_SPARE_SERVERS | حداقل workerهای آماده در حالت dynamic؛ کوچکترِ 2 و سقف workerها |
PHP_FPM_MAX_SPARE_SERVERS | حداکثر workerهای آماده در حالت dynamic؛ دو برابر حداقل workerهای آماده، تا سقف workerها |
PHP_FPM_MAX_REQUESTS | تعداد درخواست پیش از بازسازی worker؛ پیشفرض 500؛ مقدار 0 یعنی نامحدود |
PHP_FPM_PROCESS_IDLE_TIMEOUT | زمان بیکاری پیش از بستن worker در حالت ondemand، بر حسب ثانیه؛ پیشفرض 10 |
قالب مقادیر
متغیرهای عددی تنظیمات، عدد صحیح مثبت میپذیرند. فقط APACHE_MAX_CONNECTIONS_PER_CHILD و PHP_FPM_MAX_REQUESTS مقدار 0 را هم برای غیرفعال کردن بازیافت پردازش میپذیرند. کلید روشن/خاموش PHP_AUTO_TUNE نیز مقدار 0 یا 1 میپذیرد. PHP_FPM_PM نیز مقدار متنی یکی از سه حالت جدول را میگیرد.
برای متغیرهای حافظه، عدد را بدون پسوند وارد کنید؛ مثلاً PHP_WORKER_MEMORY_MB=96، نه 96M. حداقل حافظهٔ دستی OPcache و شرط کمتر بودن حافظهٔ رشتهها را نیز رعایت کنید.
مثالهای تنظیم
تنظیم خودکار با تخمین مصرف worker
در این مثال، تنظیم خودکار روشن است و مصرف هر worker بهجای مقدار پیشفرض ۶۴، برابر ۹۶ MiB تخمین زده میشود. Auto Tune برای اجرا همچنان به در دسترس بودن اطلاعات CPU و RAM اختصاصیافته به سرویس نیاز دارد.
PHP_AUTO_TUNE=1
PHP_WORKER_MEMORY_MB=96
ترکیب تنظیم خودکار و دستی
با وجود مقادیر منابع، ظرفیت Apache و FPM بهصورت خودکار محاسبه میشود، اما مقادیر زیر برای OPcache بر محاسبهٔ خودکار اولویت دارند:
PHP_AUTO_TUNE=1
PHP_OPCACHE_MEMORY_MB=64
PHP_OPCACHE_INTERNED_STRINGS_MB=8
PHP_OPCACHE_MAX_FILES=10000
تنظیم دستی PHP-FPM بدون Auto Tune
نمونهٔ زیر فقط برای ایمیج FPM است. در حالت ondemand، workerها هنگام نیاز ساخته میشوند و پس از ۱۰ ثانیه بیکاری بسته میشوند. عدد 2 صرفاً نمونه است؛ سقف workerها را متناسب با منابع و مصرف واقعی برنامه انتخاب کنید.
PHP_AUTO_TUNE=0
PHP_FPM_PM=ondemand
PHP_FPM_MAX_CHILDREN=2
PHP_FPM_MAX_REQUESTS=500
PHP_FPM_PROCESS_IDLE_TIMEOUT=10
این مثال فقط تنظیمات FPM را دستی تعیین میکند. اگر به تنظیم دستی Apache یا OPcache هم نیاز دارید، متغیرهای همان بخش را جداگانه وارد کنید.