ضبط أداء PHP 8: شرح OpCache و JIT

Backend2026-09-24TryQuickToolBox

يبدو تطبيق PHP 8 الخاص بك بطيئًا تحت الضغط. لقد قمت بتحسين الاستعلامات وإضافة التخزين المؤقت، لكن أوقات الاستجابة لا تزال متأخرة. قد يكون السبب هو الحمل الزائد لتنفيذ PHP نفسه. ميزتان قويتان - OpCache و JIT - يمكنهما تسريع الكود الخاص بك بشكل كبير، ولكن فقط إذا تم تكوينهما بشكل صحيح. يشرح هذا الدليل كيفية عملهما وكيفية ضبطهما لأحمال العمل الواقعية.

ما هو OpCache ولماذا هو مهم

PHP هي لغة تفسيرية: كل طلب عادةً ما يقوم بتحليل وتصريف ملفات المصدر الخاصة بك إلى bytecode قبل التنفيذ. يقوم OpCache بتخزين bytecode المترجم في الذاكرة المشتركة، بحيث تتخطى الطلبات اللاحقة مرحلة التحليل والتصريف. النتيجة؟ انخفاض استخدام وحدة المعالجة المركزية وأوقات استجابة أسرع.

OpCache ممكّن افتراضيًا في العديد من إعدادات الإنتاج، لكن الإعدادات الافتراضية متحفظة. يمكن أن يؤدي ضبطه إلى تحسين الإنتاجية بمقدار 2-3 مرات للتطبيقات التي تعتمد على وحدة المعالجة المركزية.

توجيهات تكوين OpCache الرئيسية

إعدادات OpCache الموصى بها للإنتاج

; php.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.interned_strings_buffer=32
opcache.preload=/path/to/preload.php
opcache.preload_user=www-data

بعد تغيير الإعدادات، أعد تشغيل PHP-FPM. راقب باستخدام opcache_get_status() للتحقق من معدل الإصابة واستخدام الذاكرة.

فهم JIT في PHP 8

الترجمة الفورية (JIT) تأخذ OpCache خطوة إلى الأمام: فهي تقوم بتصريف bytecode إلى كود آلة أصلي في وقت التشغيل. يمكن أن يؤدي ذلك إلى تسريع المهام كثيفة الاستخدام لوحدة المعالجة المركزية مثل العمليات الحسابية الرياضية بشكل كبير، لكنه لا يفعل الكثير لطلبات الويب النموذجية التي يهيمن عليها الإدخال/الإخراج (قاعدة البيانات، نظام الملفات، الشبكة).

JIT جزء من OpCache، لذا يجب عليك تمكين OpCache أولاً. في PHP 8، يتم تكوين JIT عبر opcache.jit و opcache.jit_buffer_size.

توجيهات تكوين JIT

إعدادات JIT الموصى بها

opcache.jit=tracing
opcache.jit_buffer_size=128M

ملاحظة: يعمل JIT فقط مع تمكين OpCache. في CLI، قد تحتاج إلى ضبط opcache.enable_cli=1 لاختبار JIT.

OpCache مقابل JIT: متى تستخدم أيًا منهما

الميزةOpCacheJIT
الفائدة الأساسيةيخزن bytecode المترجم مؤقتًايترجم bytecode إلى كود أصلي
الأفضل لـجميع تطبيقات PHPالبرامج النصية كثيفة الاستخدام لوحدة المعالجة المركزية وطويلة التشغيل
التأثير على التطبيقات المعتمدة على الإدخال/الإخراجعالي (يقلل التحليل/التصريف)منخفض إلى معدوم
الحمل الزائد للذاكرةمتوسطمخزن مؤقت إضافي
التعقيدمنخفضمتوسط

دليل الضبط خطوة بخطوة

  1. تمكين OpCache باستخدام الإعدادات الموصى بها أعلاه.
  2. مراقبة OpCache باستخدام opcache_get_status() أو أدوات مثل OpCache GUI. استهدف معدل إصابة أعلى من 99%.
  3. ضبط الذاكرة إذا كان opcache.memory_usage قريبًا من الحد.
  4. النظر في التحميل المسبق للأطر الكبيرة (Laravel، Symfony). أنشئ برنامجًا نصيًا للتحميل المسبق يتطلب الفئات المستخدمة بشكل متكرر.
  5. تمكين JIT فقط إذا كان تطبيقك كثيف الاستخدام لوحدة المعالجة المركزية. اختبر مع وبدون JIT لقياس التأثير.
  6. قياس الأداء باستخدام أدوات مثل ab، wrk، أو siege. قارن الطلبات في الثانية وزمن الاستجابة.
  7. انشر التغييرات تدريجيًا وراقب سجلات الأخطاء بحثًا عن مشكلات.

المزالق الشائعة وأفضل الممارسات

الأسئلة الشائعة

هل يحسن JIT الأداء لجميع تطبيقات PHP؟

لا. يفيد JIT المهام كثيفة الاستخدام لوحدة المعالجة المركزية مثل العمليات الحسابية المعقدة أو معالجة البيانات. بالنسبة لتطبيقات الويب المعتمدة على الإدخال/الإخراج (استعلامات قاعدة البيانات، استدعاءات API)، تكون المكاسب ضئيلة. غالبًا ما يوفر OpCache وحده أكبر تسريع.

كيف أعرف أن OpCache يعمل؟

تحقق من phpinfo() لحالة OpCache، أو استدعِ opcache_get_status() في برنامج نصي. ابحث عن opcache_enabled => true وعدد hits مرتفع نسبيًا إلى misses.

هل يمكنني استخدام JIT مع PHP 7؟

لا. تم تقديم JIT في PHP 8.0. يدعم PHP 7 فقط OpCache. إذا كنت تستخدم PHP 7، ركز على ضبط OpCache وفكر في الترقية إلى PHP 8 للحصول على JIT وتحسينات الأداء الأخرى.

هل أنت مستعد لتحليل أداء خادمك؟ تحقق من محلل سجلات Nginx الخاص بنا للحصول على رؤى من سجلات الوصول الخاصة بك وتحديد الاختناقات.