هل برنامج HestiaCP PHP-FPM تحت حمل ثقيل؟ خطأ صفحة الويب الديناميكية 500؟ سيتم تطبيق هذا التحسين على الفور!

هل سبق لك أن واجهت هذا الموقف؟ موقعك الإلكتروني يتباطأ فجأة، أو حتى يُظهر خطأ 500. إعادة تشغيل PHP-FPM تُعيد الموقع إلى وضعه الطبيعي ، لكن المشكلة تعود للظهور بعد فترة؟ إنه أمر مُحبط للغاية!

لماذا يحدث هذا؟ في الواقع، عادةً ما يكون السبب هو إعدادات غير صحيحة لمجموعة عمليات PHP-FPM أو عدم كفاية موارد الخادم . اليوم، سنقوم بتحسين PHP-FPM بشكل كامل ضمن HestiaCP لضمان استقرار موقعك الإلكتروني بشكلٍ كامل!

السبب الرئيسي وراء زيادة تحميل PHP-FPM

PHP-FPM هو مدير العمليات في لغة PHP ، وهو المسؤول عن معالجة الطلبات الديناميكية. قد يؤدي التكوين غير المناسب إلى ما يلي:

  • موارد الخادم استنفدت، مما يجعل PHP-FPM غير قادر على الاستجابة للطلبات الجديدة في الوقت المناسب؛
  • عدد قليل جدًا من العملياتعندما تزداد حركة المرور فجأة، لا يمكن معالجتها في الوقت المناسب؛
  • استخدام العملية مرتفع للغايةمما يؤدي إلى انفجار تحميل وحدة المعالجة المركزية.

هل برنامج HestiaCP PHP-FPM تحت حمل ثقيل؟ خطأ صفحة الويب الديناميكية 500؟ سيتم تطبيق هذا التحسين على الفور!

كيفية معرفة ما إذا كان PHP-FPM محملاً بشكل زائد؟

يمكن استخدام tophtop أمر لعرض استخدام وحدة المعالجة المركزية والذاكرة:

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.5، وقم بتغييره إلى هذا:/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.5 

يشير هذا إلى أن الموقع الإلكتروني يستخدم PHP 8.5.

دعونا نلقي نظرة على تكوين PHP-FPM الخاص بك:

[chenweiliang.com]
listen = /run/php/php8.5-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.

www.conf: "مجموعة الموارد الشاملة" المدمجة في النظام

بعد تثبيت PHP-FPM، سيقوم النظام تلقائيًا بتزويدك بـ... www.conf ملف.
انهاالتمركزالأمر بسيط للغاية - إنها مجرد مجموعة عمليات افتراضية تعمل مباشرةً بعد التثبيت، وعادةً ما تكون متصلة بـ... شبكة الاتصالات العالمية بيانات تنزيل المستخدم.

يُعد هذا النوع من المسابح مناسبًا بشكل خاص للبيئات ذات الموقع الواحد: فالتكوين خفيف الوزن، والمعلمات كلها عبارة عن قوالب عامة، مثل:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

إذا كنت تستضيف موقعًا واحدًا فقط، فيمكنك استخدامه بشكل مباشر وموثوق دون أي متاعب إضافية.

etجسم غامض.org.conf: مجموعة مخصصة

بمجرد أن تدير مواقع متعددة، لا يمكنك إبقاء الجميع محشورين في نفس المجموعة.
في هذه المرحلة، سيقوم HestiaCP تلقائيًا بإنشاء مجموعة منفصلة لكل موقع، على سبيل المثال... etجسم غامض.org.confمتخصصون في أسماء النطاقات etufo.org 服务.

الطريقة الشائعة للعب هي:

  • تغيير المستخدمين والمجموعات:user = etufo،group = etufo
  • المراقبة المستقلة:listen = /run/php/etufo.sock
  • يضمن تعديل عدد العمليات استقرارًا قويًا حتى في ظل التزامن العالي.
  • تُسهّل ملفات السجل المنفصلة عملية استكشاف الأخطاء وإصلاحها.

الفوائد واضحة: عزل آمن . حتى في حالة اختراق أحد المواقع، تظل المواقع الأخرى سليمة.

dummy.conf: ملف وهمي

dummy.conf عادة ما تكون هذه أمثلة أو قوالب يوفرها النظام.
لن يتم تشغيله فعلياً إلا إذا قمت بتعديله وتفعيله يدوياً.
تكمن أهميته في كونه أشبه بـ "دليل تشغيل"، يخبرك بكيفية كتابة تكوين جديد للمجمع.

لماذا تقسيم المسبح؟

  • 安全 性استخدم حسابات مستخدمين مختلفة لمواقع مختلفة لتجنب تضارب الأذونات.
  • 性能优化يمكن تعديل عدد العمليات بشكل فردي لكل مجموعة، مما يسمح بإجراء تعديلات مرنة بناءً على طلب حركة المرور.
  • عزليتم فصل السجلات والأخطاء وعناوين الاستماع، مما يجعل عملية استكشاف الأخطاء وإصلاحها أسهل.

على سبيل المثال، حتى في حالة تعطل www.conf ، سيظل etufo.org.conf يعمل بشكل طبيعي ولن يؤدي إلى إيقاف الخادم بالكامل.

شكرا جزيلا

  • خادم موقع واحديكفي موقع www.conf.
  • خادم متعدد المواقعيحتوي كل موقع على ملف .conf مستقل خاص به، مثل etufo.org.conf.
  • dummy.confللمرجعية فقط، لا يُنصح به.

مقارنة التكوين

www.conf (مجموعة الملفات الافتراضية)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (مجموعة مخصصة)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

تتمثل الاختلافات الرئيسية في: هوية المستخدم، وعنوان الاستماع، وعدد العمليات.

1. ضبط معلمات مجموعة عمليات PHP-FPM

إذا كان التكوين يستخدم dynamicهذه طريقة لبدء بعض عمليات العمل مسبقًا وتعديلها ديناميكيًا وفقًا لحجم الطلب، مما يسمح بالاستجابة بشكل أسرع عندما يزداد حجم الطلب فجأة.

بالنسبة للمواقع الإلكترونية التي تحتوي على قدر معين من حركة المرور، يوصى باستخدام pm = dynamicلأنه يمكنه الحفاظ على كمية معينة من العمليات الخاملة وتجنب أخطاء 500 أثناء التزامن العالي.

من المستحسن استخدامه فقط عندما يكون حجم الوصول منخفضًا للغاية وموارد الذاكرة محدودة. pm = ondemand لحفظ الموارد.

مقترح ل dynamic، وتحسين 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 بناءً على إعدادات VPS

مثال على تكوين خادم افتراضي خاص (VPS):

  • الوصف: خادم افتراضي خاص (VPS) مزود بثلاثة أقراص NVMe
  • مساحة القرص: 300 جيجا
  • عدد أنوية المعالج: 8
  • ذاكرة الوصول العشوائي: 24 GB

بناءً على مواصفات خادمك الافتراضي الخاص ( 8 أنوية معالجة، 24 جيجابايت من ذاكرة الوصول العشوائي )، فإن موارد الخادم لديك أكثر من كافية. بالنسبة لـ PHP-FPM، تتيح لك ذاكرة الوصول العشوائي بسعة 24 جيجابايت تشغيل عدد كبير جدًا من العمليات المتزامنة.

في بيئة الإنتاج، نقوم عادةً بتخصيص ذاكرة كافية (على سبيل المثال 8 جيجابايت - 12 جيجابايت) للنظام نفسه، وقواعد بيانات Apache (مثل MySQL / MariaDB)، وذاكرة التخزين المؤقت (مثل Redis / Memcached )، تاركين ما تبقى من الذاكرة (12 جيجابايت - 16 جيجابايت) ليتم تخصيصها بالكامل لـ PHP-FPM.

بناءً على متوسط ​​استخدام الذاكرة من 40 ميجابايت إلى 60 ميجابايت لكل عملية PHP ، يمكن لـ 1 جيجابايت من الذاكرة تشغيل ما يقرب من 16-25 عملية.

فيما يلي تكوين FPM عالي التزامن وعالي الأداء مصمم خصيصًا لك ، والذي يمكنه تحسين قدرة WordPress بشكل كبير ومنعه من التعطل بسبب الزيادات المفاجئة في حركة المرور:

pm = dynamic

; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300

; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32

; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16

; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64

; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000

; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s

; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s

💡 لماذا هذا التكوين؟

  1. pm.max_children = 300هذا تحسين جوهري. كان تكوينك السابق لـ 50 عملية غير كافٍ لذاكرة 24 جيجابايت. عند مواجهة زيادات مفاجئة في حركة البيانات (أو برامج الروبوت التي تغمر الخلفية)، ستُثقل 50 عملية على الفور، مما يؤدي إلى انقطاع الاتصال. زيادة هذا العدد إلى 300 عملية يمكن أن تُحسّن قدرة خادمك على معالجة التزامن عدة مرات.
  2. pm.start_servers / `min_spare_serversنظرًا لوجود 8 أنوية معالجة مركزية، يمكنك في البداية وبشكل طبيعي الاحتفاظ بمزيد من العمليات الخاملة، مما يسمح لك بالاستفادة من ميزة تعدد الأنوية بحيث يمكن فتح الطلبات الجديدة على الفور دون انتظار إنشاء العملية.
  3. pm.max_requests = 1000ارفع القيمة من 500 إلى 1000. ذاكرتك كبيرة، ولا تحتاج العمليات إلى إعادة تشغيل متكررة. رفع القيمة إلى 1000 سيقلل من استهلاك وحدة المعالجة المركزية الناتج عن كثرة إنشاء العمليات وإغلاقها.

عرض سجل العمليات البطيئة:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

بعد إجراء التغييرات، تذكر إعادة تشغيل خدمة PHP-FPM حتى يتم تطبيق التغييرات.

systemctl restart php8.5-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.5-fpm restart

ماذا لو استمرت المشكلة؟ مزيد من التحسين!

إذا استمر ظهور خطأ 500 من حين لآخر بعد اتباع التحسينات المذكورة أعلاه ، فيمكنك المتابعة مع التحسينات التالية:

1. تمكين OPcache لتحسين كفاءة تنفيذ PHP

إذا لم يتم تمكين OPcache حتى الآن، فيمكنك تثبيته بهذه الطريقة (باستخدام Ubuntu كمثال):

sudo apt install php8.5-opcache -y

ثم قم بالتعديل php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • تعطيل الكشف في الوقت الفعليقلل من عمليات الإدخال/الإخراج لنظام الملفات وحسّن الأداء.
  • ومع ذلك، هذا يعني أنه يجب عليك مسح ذاكرة التخزين المؤقت يدويًا (إعادة تشغيل خدمة PHP) بعد تعديل ملفات PHP.

بعد تعديل الإعدادات، يجب إعادة تشغيل خدمة PHP حتى يتم تطبيق التغييرات.

sudo systemctl restart php<版本>-fpm

تأثير؟ تم تحسين سرعة تنفيذ صفحة 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 بشكل كبير وسيكون تشغيل موقع الويب أكثر استقرارًا! 🔥

اذهب وجربه الآن! 💪🚀

إذا كنت لا تزال ترغب في معرفة المزيد عن تخصيص قوالب PHP-FPM باستخدام HestiaCP، فستمنحك هذه المقالة فهمًا أعمق:

👈 قالب HestiaCP المخصص لـ PHP-FPM: أسرار تحسين أداء PHP 8.5 ▼

ستجد في هذا المحتوى ما يلي:

  • تقنيات تحسين التزامن العالي: كيفية تحسين سرعة الاستجابة من خلال تكوين عملية معقول.
  • حل عزل الأمان: تجنب مخاطر الوصول عبر المواقع المختلفة واضمن استقرار الحساب.
  • السجلات والمراقبة: استخدم السجلات البطيئة لتحديد الاختناقات وتحسين أداء الموقع الإلكتروني باستمرار.

نأمل أن تكون المقالة "HestiaCP PHP-FPM Overload? Dynamic Webpage 500 Error? This Optimization Method Will Show Instant Results!" المنشورة على مدونة تشين ويليانغ ( https://www.chenweiliang.com/ ) مفيدة لك.

لا تتردد في مشاركة رابط هذه المقالة: https://www.chenweiliang.com/cwl-32512.html

لاكتشاف المزيد من الحيل المخفية🔑، مرحبًا بك في الانضمام إلى قناتنا على Telegram!

مشاركة ومثل إذا كنت ترغب في ذلك! مشاركاتك وإعجاباتك هي حافزنا المستمر!

 

发表 评论

لا يوجد أي مشكلة في هذا الأمر.

انتقل إلى الأعلى