لقد اكتشفت مؤخرًا أن ذاكرة مدونتي يتم "استهلاكها" دائمًا بين الحين والآخر بعد تسجيل الدخول إلى الواجهة الخلفية، وقد يكون هناك تأخيرات في بعض الأحيان. في البداية، كنت أظن أن السبب في ذلك هو عدم كفاية المبادلة، لذلك أضفت تم تبديل بضعة غيغابايت إلى مضيف VPS ولاحظت بعد فترة أنه بغض النظر عن حجم المبادلة، فقد تم "أكلها" ببطء!
من الواضح أن بعض خدمات PHP كانت تشغل ذاكرة VPS ولم تطلقها، مما تسبب في استدعاء Swap بعد استنفاد الذاكرة الفعلية. ومن الواضح أن Swap لا يعمل بكفاءة مثل الذاكرة الفعلية، وبالتالي تصبح العملية عالق. وبالنظر إلى أن موقع WordPress يستخدم حاليًا عددًا كبيرًا جدًا من السمات والمكونات الإضافية، فمن الطبيعي أن يحدث هذا الموقف.
في بنية LNMP، تعمل PHP في وضع FastCGI. وفقًا للبيان الرسمي، سيقوم php-cgi بإعادة تدوير كل الذاكرة التي يستخدمها البرنامج النصي في نهاية كل طلب، لكنه لن يطلقها إلى نظام التشغيل، لكنه سيستمر. للاحتفاظ به. الرد على طلب PHP التالي. وphp-fpm هو مدير عمليات FastCGI، ويستخدم للتحكم في ذاكرة php وعملياته.
ولذلك فإن الحل هو تحسين إجمالي عدد العمليات والذاكرة التي تشغلها عملية واحدة من خلال php-fpm، وبالتالي حل مشكلة احتلال عملية php-fpm لذاكرة كبيرة وعدم تحرير الذاكرة. المزيد من أساليب تحسين خادم Linux وتجربة إنشاء مواقع الويب، بالإضافة إلى:
- أمر Linux Crontab، بناء الجملة الأساسي للمهمة المجدولة والتشغيل التعليمي-VPS/أتمتة الخادم
- شركة Alibaba Cloud Japan VPS تستضيف تقييم أداء السرعة - خط SoftBank الياباني وهونج كونج NTT
- يمكّن تحليل اسم مجال DNS DNSSEC من منع اختطاف DNS - إعدادات Google Cloud DNS DNSSEC
ملاحظة: تم التحديث في 14 ديسمبر 2018، إذا لم تكن الذاكرة والأداء لمضيف VPS الخاص بك جيدًا جدًا، فمن الأفضل تمكين التخزين المؤقت في هذا الوقت لتوفير استهلاك الموارد بشكل كبير: يقوم WordPress بتمكين تسريع ذاكرة التخزين المؤقت Nginx fastcgi_cache الطريقة - مثال لتكوين Nginx.
ملاحظة: تم التحديث في 29 سبتمبر 2019، نظرًا لأداة تحسين الخادم ngx_pagespeed التي طورتها Google، فإنها تدمج مجموعة كاملة من أدوات التحسين مثل التحميل المتأخر للصور، وwebp التكيفي، وتحسين JS وCSS، والصورة. التحسين: تقوم أداة تحسين PageSpeed Server-Nginx بنشر وحدة ngx_pagespeed وتختبر تأثيرات متسارعة.
1. تحليل وتحديد استخدام الذاكرة لـ php-fpm
إذا وجدت أن مضيف VPS عالقًا، فتحقق أولاً من استخدام الذاكرة، والأوامر شائعة الاستخدام هي Top وGlances وFree وما إلى ذلك. يمكن للأصدقاء الذين لا يعرفون هذه الأوامر التحقق أولاً من موضوع ما إذا كانت محطة التعدين تقوم بذلك: ملخص أوامر مراقبة نظام Linux - وحدة المعالجة المركزية الرئيسية، والذاكرة، وإدخال القرص، وما إلى ذلك للعثور على اختناقات الأداء.
استخدم أمر Glances واضغط m لعرض استخدام الذاكرة لعملية مضيف VPS الحالية، وقم بفرزها من الذاكرة الأكثر إشغالًا إلى الأقل (أو استخدم الأمر Top واضغط M، التأثير هو نفسه). كما هو موضح أدناه (اضغط للتكبير):
3.2 تقليل عدد عمليات php-fpm
إذا كانت ذاكرة مضيف VPS الخاص بك مشغولة ومستنفدة، فيمكنك التحقق من عدد عمليات php-fpm الخاصة بك واحسب وفقًا لعدد عمليات php-fpm = الذاكرة/2/30 عدد عمليات php-fpm المناسبة لها 1 غيغابايت من الذاكرة هي 10- ما بين 20 و20، يعتمد ذلك على الوظائف الإضافية التي يتم تحميلها بواسطة PHP الخاص بك.
3.3 مثال لتكوين php-fpm
هنا، يتم استخدام تكوين VPS لـ php-fpm بذاكرة سعة 1 جيجابايت كعرض توضيحي، وفي التشغيل الفعلي، يجب مراعاة قيمة الإعداد بناءً على أداء الخادم نفسه، PHP، وما إلى ذلك.
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. حل مشكلة عدم تحرير الذاكرة من خلال عملية php-fpm
يتم تحقيق المشكلة المذكورة أعلاه المتمثلة في تقليل استخدام ذاكرة php-fpm عن طريق تقليل العدد الإجمالي لعمليات php-fpm أثناء الاستخدام الفعلي، حيث تبين أن عملية php-fpm لا تزال تعاني من مشكلة احتلال الذاكرة لفترة طويلة دون الحاجة إلى ذلك. الافراج عنه. الحل هو تقليل عدد طلباتpm.max_requests.
الحد الأقصى لعدد الطلبات، max_requests، يعني أنه عندما يتراكم عدد الطلبات التي تتم معالجتها بواسطة عملية PHP-CGI إلى max_requests، سيتم إعادة تشغيل العملية تلقائيًا، وبالتالي تحقيق الغرض من تحرير الذاكرة. خذ إعدادات مضيف VPS بذاكرة تبلغ 1 جيجابايت كمثال (إذا كانت القيمة التي قمت بتعيينها لا تصل إلى مستوى تحرير الذاكرة، فيمكنك الاستمرار في خفضها):
pm.max_requests = 500
عندما تصل عملية php-fpm إلى القيمة التي تم تعيينها بواسطةpm.max_requests، سيتم إعادة تشغيل العملية لتحرير الذاكرة. الصورة أدناه هي النتيجة بعد الاختبار الذي أجريته، ويمكن ملاحظة أنه تم إنهاء عملية php-fpm بالقوة وتم تحرير الذاكرة.
5. ملخص
بالنسبة لمتطلبات الذاكرة الكبيرة والتزامن والتوفر، يوصى باستخدام وضع الإدارة الثابتة + أكبر PM.max_children. إذا كان الخادم ذو ذاكرة صغيرة، فمن المستحسن استخدام الوضع الديناميكي أو الوضع حسب الطلب وتقليل عدد عمليات PM.start_servers وpm.max_spare_servers.
لماذا لم أضبط المعلمات لتحقيق التأثير المطلوب؟ وفقًا لتجربة wzfou.com، لا يمكن تعميم معلمات ملف تكوين php-fpm، ويجب تعديلها بناءً على أداء الخادم والمحتوى الديناميكي للويب ومتطلبات التوفر من الأفضل التحقق مما إذا كان هناك تسرب للذاكرة.
تم التحديث في 9 أكتوبر 2019، إذا تم ضبط معلمات php-fpm بشكل صغير جدًا، فقد يحدث خطأ 502. الحل: قم بحل الخطأ 502 في قائمة حفظ تحرير الخلفية في WordPress.