آپاچی؛ شب ۳۷: ظرفیت FPM، OPcache و slow log
فهرست نوشته
افزایش تعداد کارگر بدون بودجهٔ حافظه میتواند کل سرویس را از دسترس خارج کند. امشب ظرفیت PHP را با اندازهگیری انتخاب میکنیم و درخواست کند را بدون نمایش خطا به کاربر پیدا میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: pool WordPress شب سیوششم؛ صفحهٔ آزمون PHP بدون راز؛ OPcache از بستهٔ توزیع نصب شده باشد.
ظرفیت بر اساس داده#
RSS حافظهٔ مقیم هر فرایند است و شامل برخی صفحههای مشترک میشود؛ مجموع آن برآورد دقیقی از حافظهٔ یکتا نیست. برای اندازهگیری دقیقتر، PSS در /proc/PID/smaps_rollup را با دسترسی مناسب ببین. چند درخواست نمایندهٔ برنامه بفرست و مصرف واقعی، سیستمعامل، Apache، دیتابیس و cache را جدا بودجهبندی کن.
اگر مثلاً 600 MiB برای PHP و حدود 60 MiB برای هر کارگر برآورد کردهای، حد نظری ده کارگر است؛ با حاشیهٔ اطمینان از مقدار کمتر شروع کن. این اعداد مثالاند، اندازهگیری این مخزن نیستند.
در pool، مقادیر انتخابشده را تنظیم کن:
pm.max_children = 8
pm.max_requests = 500
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/wordpress-slow.log
request_terminate_timeout = 30s
catch_workers_output = yes
در Debian پوشهٔ /var/log/php-fpm را root-owned با حالت 755 بساز؛ در RHEL مسیر بسته و برچسب آن را بررسی کن. slow log میتواند stack و دادهٔ برنامه را داشته باشد؛ دسترسی و نگهداری آن محدود باشد. terminate timeout ممکن است کار طولانی مشروع را قطع کند؛ jobs طولانی را جدا طراحی کن.
OPcache برای کد، نه محتوای صفحه#
OPcache کد کامپایلشدهٔ PHP را نگه میدارد. در فایل ini شاخهٔ FPM، نه CLI:
opcache.enable=1
opcache.memory_consumption=128
opcache.validate_timestamps=1
opcache.revalidate_freq=2
display_errors=Off
log_errors=On
user_ini.filename=
خط آخر فایلهای تنظیم محلی .user.ini را در این deployment مدیریتشده غیرفعال میکند؛ تنظیم PHP از فایلهای مدیر اعمال میشود. نیاز نرمافزار را پیش از تعمیم بررسی کن.
آزمون و بازگشت: یک صفحهٔ آزمایشگاهی با sleep(6) بساز؛ باید slow log ثبت شود و صفحه را بعداً حذف کن. در RHEL AVC مربوط به slowlog را هم ببین. ظرفیت و timeout را از backup برگردان، FPM را بررسی و restart کن؛ افزایش عدد بهتنهایی شاهد بهبود نیست.
منبع: کنترل فرایند و slowlog در FPM ، تنظیم OPcache .