دليل المادة
- 1 السبب الرئيسي وراء زيادة تحميل PHP-FPM
- 2 تحسين مجموعة عمليات PHP-FPM (ضبط المعلمات الأساسية)
- 3 تمكين مراقبة حالة PHP-FPM لتتبع التقدم في أي وقت
- 4 تحسين سجلات PHP-FPM لاستكشاف المشكلات وإصلاحها بسرعة
- 5 أعد تشغيل PHP-FPM بانتظام لمنع تسرب الذاكرة
- 6 ماذا لو استمرت المشكلة؟ مزيد من التحسين!
- 7 ملخص: قم بتحسين PHP-FPM ولن يتعطل موقع الويب بعد الآن!
هل سبق لك أن واجهت هذا الموقف؟تباطأ الوصول إلى الموقع فجأة، أو حتى أدى إلى ظهور خطأ 500. بعد إعادة تشغيل PHP-FPM، عاد إلى وضعه الطبيعي.ولكن المشكلة تظهر مرة أخرى بعد فترة من الوقت؟ هذا محبط للغاية!
لماذا يحدث هذا؟في الواقع، هذا هو الحال عادةلم يتم تكوين مجموعة عمليات PHP-FPM بشكل صحيح، أو أن موارد الخادم غير كافية.سببها. اليوم سوف نقوم بالتحسين بشكل كامل هيستياCP PHP-FPM تحت الغطاء يجعل موقع الويب مستقرًا كالصخرة!
السبب الرئيسي وراء زيادة تحميل PHP-FPM
PHP-FPM هومدير العمليات، وهو المسؤول عن التعامل مع الطلبات الديناميكية. إذا لم يكن التكوين معقولاً، فقد يؤدي ذلك إلى:
- موارد الخادم استنفدت، مما يجعل PHP-FPM غير قادر على الاستجابة للطلبات الجديدة في الوقت المناسب؛
- عدد قليل جدًا من العملياتعندما تزداد حركة المرور فجأة، لا يمكن معالجتها في الوقت المناسب؛
- استخدام العملية مرتفع للغايةمما يؤدي إلى انفجار تحميل وحدة المعالجة المركزية.

كيفية معرفة ما إذا كان PHP-FPM محملاً بشكل زائد؟
يمكن استخدام top 或 htop أمر لعرض استخدام وحدة المعالجة المركزية والذاكرة:
top -c
إذا رأيت معلومات العملية مشابهة لما يلي، فهذا يعني أن PHP-FPM يعمل تحت حمل مرتفع:
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
هل تلاحظ كيف تستهلك هذه العمليات ما يزيد عن 70% من وحدة المعالجة المركزية؟ إذا حدث هذا كثيرًا، فإن PHP-FPM الخاص بك لابد أن تكون هناك مشكلة!
إذن، كيف يمكننا تحسين تكوين PHP-FPM بحيث لا يصبح الخادم مثقلًا بعد الآن؟
تحسين مجموعة عمليات PHP-FPM (ضبط المعلمات الأساسية)
أولاً، افتح php-fpm ملفات التكوين:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *قم بالتغيير إلى إصدار PHP الخاص بك، مثل PHP8.3، وقم بتغييره إلى هذا:
/etc/php/8.3/fpm/pool.d/www.conf
استعلام عن إصدار PHP الذي تم تعيينه بواسطة HestiaCP
v-list-web-domain user domain.com
على سبيل المثال:
v-list-web-domain abc chenweiliang.com
في الإخراج، سوف ترى شيئًا مثل:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
وهذا يعني أن الموقع يستخدم PHP 8.3.
دعونا نلقي نظرة على تكوين PHP-FPM الخاص بك:
[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
يمكنك أن ترى أن pm المستخدم هو ondemand،على الرغم من أنه يمكن أن يقلل من استخدام الموارد أثناء وقت الخمول، إلا أنه عندما يزداد حجم الحركة فجأة، فقد لا تتمكن العملية من الاستجابة في الوقت المناسب.مما أدى إلى خطأ 500.
1. ضبط معلمات مجموعة عمليات PHP-FPM
إذا كان التكوين يستخدم dynamicهذه طريقة لبدء بعض عمليات العمل مسبقًا وتعديلها ديناميكيًا وفقًا لحجم الطلب، مما يسمح بالاستجابة بشكل أسرع عندما يزداد حجم الطلب فجأة.
بالنسبة للمواقع الإلكترونية التي تحتوي على قدر معين من حركة المرور، يوصى باستخدام pm = dynamicلأنه يمكنه الحفاظ على كمية معينة من العمليات الخاملة وتجنب أخطاء 500 أثناء التزامن العالي.
من المستحسن استخدامه فقط عندما يكون حجم الوصول منخفضًا للغاية وموارد الذاكرة محدودة. pm = ondemand لحفظ الموارد.
مقترح ل ondemand، وتحسين pm.max_children والمعلمات الأخرى:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
لماذا تريد تغييره بهذا الشكل؟
pm = dynamic:تخصيص العمليات بشكل أكثر مرونة لتجنب انتظار الطلب الذي قد يكون سببه الطلب حسب الطلب؛pm.max_children = 16:منع حدوث أخطاء 500 بسبب عدد قليل جدًا من العمليات؛pm.start_servers = 5:تجنب بدء التشغيل البطيء للعملية؛pm.max_requests = 3000:منع تسرب الذاكرة، إعادة تدوير العملية بانتظام.
2. قم بتحديد وقت تنفيذ نصوص PHP لمنع الإشغال طويل الأمد
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
هذا يمكن أن يمنع بعضيمكن أن تؤدي نصوص PHP التي تستخدم قدرًا كبيرًا من وحدة المعالجة المركزية إلى إيقاف تشغيل الخادم الخاص بك.
بعد الحفظ، أعد تشغيل عملية PHP:
sudo systemctl restart php8.3-fpmتمكين مراقبة حالة PHP-FPM لتتبع التقدم في أي وقت
تمكين مراقبة عملية PHP-FPM وعرضها في أي وقتالعدد الحالي للعمليات النشطة وحالة انتظار الطلبلتجنب التحميل الزائد على الخادم.
在 php-fpm.conf تمت الإضافة في:
pm.status_path = /status
ثم تكوين Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
بهذه الطريقة، يمكنك http://yourdomain.com/status تعرف على PHP-FPM أثناء العمل!
تحسين سجلات PHP-FPM لاستكشاف المشكلات وإصلاحها بسرعة
在 php-fpm.conf المصدر:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
بهذه الطريقة، عندما يحدث خطأ 500، يمكنك عرض السجل مباشرة:
tail -f /var/log/php-fpm/error.log
انظر إذا كان PHP يبلغ عن خطأ، مثل out of memory،script execution timeout 等.
أعد تشغيل PHP-FPM بانتظام لمنع تسرب الذاكرة
قادر على المرور cron أعد تشغيل PHP-FPM بانتظام لمنع العمليات طويلة الأمد من التسبب فيتسربات الذاكرة.
crontab -e
أضف المهمة المجدولة التالية لإعادة تشغيل PHP-FPM تلقائيًا في الساعة 3 صباحًا كل يوم:
0 3 * * * /usr/sbin/service php8.3-fpm restart
ماذا لو استمرت المشكلة؟ مزيد من التحسين!
إذا كنت لا تزال تتبع التحسين المذكور أعلاهفي بعض الأحيان تحدث أخطاء 500يمكنك الاستمرار في التحسينات التالية:
1. تمكين OPcache لتحسين كفاءة تنفيذ PHP
إذا لم يتم تمكين OPcache حتى الآن، فيمكنك تثبيته بهذه الطريقة (باستخدام Ubuntu كمثال):
sudo apt install php8.3-opcache -y
ثم قم بالتعديل php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
تأثير؟ تم تحسين سرعة تنفيذ صفحة PHP بشكل كبير!
2. تحسين تكوين Nginx
تأكد من أن المعلمات المرتبطة بـ Nginx معقولة، مثل fastcgi_read_timeout قم بتعديله بشكل مناسب لتجنب إنهاء نصوص PHP بواسطة Nginx بسبب وقت التنفيذ الطويل:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
ملخص: قم بتحسين PHP-FPM ولن يتعطل موقع الويب بعد الآن!
ما هي التعديلات التي أجريناها بعد هذا التحسين؟
✅ تحسين مجموعة عمليات PHP-FPM،استعمال ondemandوتحسين pm.max_children المعلمة؛
✅ تحديد وقت تنفيذ نصوص PHPلمنع احتلال وحدة المعالجة المركزية على المدى الطويل؛
✅ تمكين مراقبة PHP-FPM، عرض تحميل العملية في الوقت الحقيقي؛
✅ تحسين سجلات PHP-FPM، استكشاف الأخطاء وإصلاحها بسرعة 500 خطأ؛
✅ أعد تشغيل PHP-FPM بانتظاممنع تسرب الذاكرة؛
✅ تمكين OPcacheتحسين كفاءة تنفيذ PHP؛
✅ تحسين تكوين Nginxلتجنب مشاكل انتهاء المهلة.
بعد هذا التحسين، سيتم تقليل تحميل PHP-FPM بشكل كبير وسيكون تشغيل موقع الويب أكثر استقرارًا! 🔥
اذهب وجربه الآن! 💪🚀
مدونة Hope Chen Weiliang ( https://www.chenweiliang.com/ ) تمت مشاركة "هل تحميل HestiaCP PHP-FPM مرتفع للغاية؟ خطأ صفحة الويب الديناميكية 500؟ سيتم تطبيق هذا التحسين على الفور! "قد يكون مفيدًا لك."
مرحبا بكم في مشاركة رابط هذه المقالة:https://www.chenweiliang.com/cwl-32512.html
لاكتشاف المزيد من الحيل المخفية🔑، مرحبًا بك في الانضمام إلى قناتنا على Telegram!
مشاركة ومثل إذا كنت ترغب في ذلك! مشاركاتك وإعجاباتك هي حافزنا المستمر!