لإزالة تحذير تجاوز حد ذاكرة PHP في Nextcloud، اضبط قيمة ` memory` memory_limitعلى 512 ميجابايت على الأقل 512Mفي إعدادات PHP المستخدمة من قِبل خادم الويب، ثم أعد تشغيل خدمة PHP المعنية أو أعد تحميلها. يوصي دليل إدارة Nextcloud الحالي والمستقر بتخصيص 512 ميجابايت على الأقل لهذا الإعداد. السبب الأكثر شيوعًا لبقاء التحذير بعد تعديل ملف هو أن خادم الويب يستخدم إعدادات PHP مختلفة عن تلك المستخدمة في تثبيت PHP عبر سطر الأوامر.
اختر الإجراء المناسب لبيئة النشر الخاصة بك: Apache مع mod_php، أو Apache أو Nginx مع PHP-FPM، أو حاوية، أو حزمة Nextcloud مُدارة. لا تُعدّل قيمة عشوائية مُحددة للمضيف php.iniوتفترض أن جميع بيئات النشر تستخدمها. تحقق من النتيجة من صفحة نظرة عامة على إعدادات Nextcloud، والتي تعكس تكوين تطبيق الويب.
ماذا يعني هذا التحذير؟
يمثل هذا memory_limitالحد الأقصى للذاكرة التي يمكن لبرنامج PHP واحد تخصيصها. وهو ليس إجمالي ذاكرة الوصول العشوائي (RAM) المحجوزة لـ Nextcloud، ولا يزيد من الذاكرة الفعلية المتاحة للخادم. ينص دليل Nextcloud على ضرورة تخصيص 512 ميجابايت على الأقل لهذا التوجيه. وتوضح متطلبات النظام أن احتياجات ذاكرة الخادم الفعلية تختلف باختلاف المستخدمين والتطبيقات والملفات والنشاط؛ وتوصي بتخصيص 512 ميجابايت على الأقل من ذاكرة الوصول العشوائي لكل عملية PHP، مع حد أدنى قدره 128 ميجابايت.
يمكن لرفع حدّ استخدام PHP حلّ مشكلة تحذير التكوين، وإتاحة مساحة أكبر للطلبات التي تستهلك ذاكرة كبيرة. مع ذلك، لا يُمكنه زيادة ذاكرة الوصول العشوائي (RAM) لخادم ذي موارد محدودة، أو إصلاح تسريب الذاكرة، أو ضمان إتمام جميع التطبيقات بنجاح. إذا كان الخادم يعاني بالفعل من ضغط على الذاكرة، فقد يؤدي رفع الحد الأقصى لكل طلب إلى زيادة خطر استنفاد ذاكرة الوصول العشوائي (RAM) للنظام نتيجةً لعمليات PHP المتزامنة.
ما هو إعداد PHP الذي يجب عليك تعديله؟
حدد أولاً كيفية تشغيل Nextcloud باستخدام PHP. يُظهر فحص طرفي مثل ` php --ininpm install` إعدادات سطر الأوامر (CLI). قد تستخدم طلبات الويب الخاصة بـ Nextcloud وحدة Apache منفصلة أو خدمة PHP-FPM مع php.iniتجاوز إعدادات مجموعة أخرى. يُشير Nextcloud تحديدًا إلى أن PHP الخاص بالويب وPHP الخاص بسطر الأوامر قد يستخدمان ملفات تكوين مختلفة.
تتضمن المواقع النموذجية في الأنظمة المشتقة من دبيان /etc/php/8.x/apache2/php.iniملفات PHP الخاصة بوحدة أباتشي و /etc/php/8.x/fpm/php.iniPHP-FPM. يختلف إصدار PHP الفعلي وأسماء المجلدات. تستخدم التوزيعات الأخرى مسارات مختلفة، مثل مسار مشترك /etc/php.ini. هذه أمثلة فقط؛ استخدم مدير الحزم، وإعدادات الخدمة، وبيئة تشغيل PHP لتحديد موقع الملف النشط.
لفحص إعدادات واجهة سطر الأوامر، قم بتشغيل ما يلي:
php --ini
php -i | grep -i '^memory_limit'
تُفيد هذه الأوامر في المهام المُجدولة التي تستدعي PHP من سطر الأوامر، لكنها لا تُثبت أن عملية Nextcloud المُتاحة للمتصفح تستخدم القيمة نفسها. تجنّب ترك phpinfo()صفحة عامة على الخادم، فقد تكشف عن المسارات والوحدات النمطية وتفاصيل وقت التشغيل.
كيف يمكنك تحديد الحد الأقصى لـ Apache أو PHP-FPM؟
قم بعمل نسخة احتياطية من ملف الإعدادات النشط قبل تعديله. في الملف الصحيح php.ini، ابحث عن السطر الحالي memory_limitوقم بتعيينه إلى 512Mالقيمة المحددة أو قيمة أعلى مناسبة لحجم العمل لديك.
memory_limit = 512M
استخدم إعدادًا واحدًا نشطًا بدلًا من إضافة أسطر مكررة في نهاية عدة ملفات. يمكن لمجموعة PHP-FPM أيضًا تحديد قيم لعمالها، لذا تحقق من إعدادات المجموعة إذا php.iniلم تُفعّل القيمة. تدعم بعض عمليات نشر PHP إعدادًا لكل دليل .user.ini؛ ويعتمد تفعيل هذا الإعداد على إعدادات الخادم، ويجب التأكد من ذلك مع المسؤول.
أباتشي يستخدم mod_php
عدّل ملف الإعدادات php.iniالذي يستخدمه Apache، ثم احفظه، وأعد تشغيل Apache ليتم إعادة تحميل إعدادات الوحدة. تختلف أسماء الخدمات. في Debian أو Ubuntu، يكون اسم الخدمة عادةً `<اسم الخدمة>` apache2؛ وفي أنظمة RHEL، يكون عادةً `<اسم httpdالخدمة>`. استخدم اسم الخدمة المناسب لنظام التشغيل الخاص بك ولإجراءات الصيانة.
sudo systemctl restart apache2
استبدل هذا الاسم apache2إذا كانت توزيعتك تستخدم اسم وحدة مختلفًا. إذا تم تشغيل Nextcloud عبر PHP-FPM بدلاً من mod_php، فلن تؤدي إعادة تشغيل Apache وحدها إلى إعادة تحميل عمال PHP.
أباتشي أو إنجينكس باستخدام PHP-FPM
عدّل إعدادات PHP-FPM المستخدمة فعليًا من قِبل الموقع. بعد حفظ التغييرات، أعد تشغيل خدمة PHP-FPM المطابقة أو أعد تحميلها. قد تتضمن وحدتها إصدار PHP، على سبيل المثال php8.3-fpm، أو قد تستخدم اسمًا آخر خاصًا بالمورد.
sudo systemctl restart php8.3-fpm
استخدم اسم الخدمة الصحيح لإصدار PHP المُثبّت لديك. يُمرّر Nginx طلبات PHP إلى FPM، لذا يتطلب تغيير إعدادات PHP عادةً تطبيق التغيير على FPM؛ إعادة تشغيل Nginx وحدها لا تُعيد تحميل حد ذاكرة PHP. إذا كان تكوين مجموعة PHP-FPM لديك يُلغي الإعدادات الافتراضية memory_limit، فعدّل إعدادات المجموعة أو أزل الإلغاء، ثم أعد تشغيل المجموعة.
ماذا لو تم تشغيل Nextcloud في Docker أو AIO أو Snap أو حزمة أخرى؟
استخدم آلية التكوين الخاصة بطريقة التثبيت هذه. عادةً لا يؤدي تعديل ملفات PHP على المضيف إلى تغيير بيئة تشغيل PHP داخل الحاوية أو الحزمة المعزولة. توثق صورة Docker الرسمية لـ Nextcloud PHP_MEMORY_LIMITمتغير البيئة، وقيمته الافتراضية غير مُحددة 512Mفي وثائق الصورة الحالية. عيّنه في ملف Compose أو تكوين الحاوية، ثم أعد إنشاء حاوية التطبيق أو أعد تشغيلها وفقًا لإجراءات النشر.
environment:
PHP_MEMORY_LIMIT: 512M
لا تقم بنسخ هذا الإعداد إلى جميع أنواع التثبيت. يشير دليل Nextcloud إلى أن بيئات التشغيل الجاهزة، مثل AIO وSnap وNCP وCommunity Docker، تأتي مُهيأة مسبقًا بـ PHP، ويُوجه المسؤولين إلى التعليمات الخاصة بكل حزمة لتخصيصها. في هذه الحالات، استخدم الواجهة أو الوثائق المُعتمدة لتلك الحزمة. كما يُمكن أن تُلغي عمليات ربط وحدات التخزين الدائمة والتكوين المُنشأ أي تعديل يدوي لمرة واحدة.
كيف يمكنك التأكد من إصلاح التحذير؟
- قم بتطبيق التغيير على إعدادات PHP الخاصة بالويب وأعد تشغيل أو أعد تحميل خدمة الويب/PHP ذات الصلة.
- قم بتسجيل الدخول إلى Nextcloud كمسؤول وافتح الإعدادات > الإدارة > نظرة عامة .
- قم بتحديث الصفحة وراجع تحذيرات الإعدادات. تأكد من اختفاء تحذير حد ذاكرة PHP.
- قم بتشغيل عملية نموذجية أدت سابقًا إلى ظهور التحذير، مثل مهمة التطبيق المتأثرة، وقم بمراجعة سجلات Nextcloud و PHP بحثًا عن رسائل استنفاد الذاكرة.
إذا كنت تُشغّل أيضًا مهام Nextcloud في الخلفية عبر cron النظامي، فتحقق من إعدادات PHP في واجهة سطر الأوامر بشكل منفصل. يمكن إزالة التحذير الظاهر على الويب بينما لا تزال مهام واجهة سطر الأوامر تستخدم حدًا أدنى. تأكد من قيمة واجهة سطر الأوامر باستخدام الأمر المناسب php --iniلنفس php -iملف PHP الثنائي المستخدم في أمر cron.
متى يجب رفع القيمة فوق 512 مليون؟
لا تقم برفع هذا الحد إلا عند اختفاء التحذير، ولكن لا يزال عبء العمل الموثق يصل إلى حد PHP، أو عندما تتطلب إرشادات التطبيق المدعومة المزيد. تحقق أولاً من ذاكرة الخادم الفعلية، وعدد عمال PHP-FPM، وذاكرة قاعدة البيانات، والخدمات الأخرى. بما أن PHP يطبق الحد لكل نص برمجي، فقد تستخدم عدة عمال مشغولين ذاكرة كبيرة في الوقت نفسه. حدد حدًا مُقاسًا يتناسب مع ميزانية ذاكرة المضيف بدلاً من استخدام `public` -1، الذي توثقه PHP بأنه لا يوجد له حد للذاكرة.
إذا اختفى التحذير ولكن لا يزال الخادم بطيئًا أو يتم إيقاف العمليات، فافحص استخدام ذاكرة النظام وذاكرة التبديل، وسجلات PHP-FPM، وسجلات Nextcloud. تحقق مما إذا كان تطبيق أو طلب معين يستهلك ذاكرة زائدة. تعالج ذاكرة التخزين المؤقت مثل APCu أو Redis مشاكل التخزين المؤقت والأداء؛ وهي ليست بديلاً عن ضبط إعدادات PHP memory_limit. غيّر عاملًا واحدًا في كل مرة لتحديد ما إذا كانت النتيجة قد تحسنت.
فحوصات سريعة حسب الأعراض
- يبقى التحذير بعد تعديل ملف php.ini: تحقق مما إذا كنت قد عدلت ملف CLI بدلاً من ملف Apache/FPM، أو ما إذا كان إعداد مجموعة يتجاوزه.
- يختفي التحذير ولكن مهمة cron لا تزال تفشل: تحقق من ملف PHP الثنائي الخاص بواجهة سطر الأوامر وتكوينه المنفصل.
- يقوم خادم الويب بإرجاع خطأ بعد إعادة التشغيل: افحص حالة خادم الويب أو خدمة PHP-FPM وسجلاتها، وقم باستعادة النسخة الاحتياطية إذا تسبب تغيير التكوين في فشل بدء التشغيل.
- يختفي التحذير ولكن المضيف ينفد من ذاكرة الوصول العشوائي (RAM): قلل التزامن، أو أضف ذاكرة، أو حدد العملية التي تستخدم الذاكرة قبل زيادة حد PHP بشكل أكبر.
- إذا كنت تستخدم حاوية أو حزمة جاهزة للاستخدام: قم بتغيير إعدادات PHP المدعومة في الحزمة بدلاً من ملف php.ini الخاص بالمضيف.
المراجع الرسمية