تلقيت اليوم رسالة من صديق على WeChat يذكرني فيها بأنه لا يمكن فتح المدونة. من المؤكد أنه بعد فتحه، يظهر مباشرة "لقد واجه موقعك خطأً فادحًا." إذا فكرت في الأمر بعناية، بالإضافة إلى تعرضه للهجوم مؤخرًا، فقد قامت المدونة بتثبيت المكون الإضافي W3 Total Cache، وفقًا للتكهنات. يمكن استنتاج أن المكون الإضافي هو المسؤول.

بعد التحقيق، تبين أن خطأ PHP هو: "Uncaught RedisException: أمر OOM غير مسموح به عند استخدام الذاكرة"، مما يشير إلى أن Redis لا يمكنه كتابة البيانات إلى الذاكرة، حتى إذا تم إعادة تشغيل الخادم. الحل النهائي هو ضبط تكوين Redis وزيادة حجم الذاكرة الافتراضية.

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

  1. كود WordPress الشامل والمتوافق للغاية يسلط الضوء على المكون الإضافي Enlighter-WP الأساسي
  2. Poedit، أداة أساسية لإضفاء الطابع الصيني على سمات WordPress والمكونات الإضافية - تقوم تلقائيًا بإنشاء ملفات .Po و.Mo
  3. استخدم Elasticsearch كأداة للبحث في WordPress في الموقع، وقم بتثبيت ElasticSearch وkibana وik word sectioner

1. قم بتشغيل وضع تصحيح WP

عندما يواجه WordPress الخاص بك خطأً، لا داعي للذعر. اختر فتح وضع التصحيح في WordPress واستدعاء أخطاء PHP. مرجع الطريقة: وضع تشخيص الأخطاء في WordPress - متخصص في معالجة صفحات WP الفارغة، وأخطاء الخادم 500، وتعارضات المكونات الإضافية.

2. ابحث عن أخطاء WP القاتلة

بعد تشغيل وضع التصحيح في WordPress، ستعرض صفحة الويب أخطاء PHP، كما يلي:

خطأ فادح: RedisException لم يتم اكتشافه: أمر OOM غير مسموح به عند استخدام الذاكرة > 'maxmemory' في /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68 Stack. تتبع: #0 /xxxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php(68): Redis->setex('w3tc_1987146988...', 180, 'a:2:{s: 7:"conte…') #1 /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache_Regular.php(293): W3TCCache_Redis->set('0optionsallopti...', Array, 180) # 2 /xxx/wzfou.com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache_Regular.php(388): W3TCObjectCache_WpObjectCache_Regular->set('alloptions', Array, 'options', 0) #3 /xxx/wzfou .com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache.php(77): W3TCObjectCache_WpObjectCache_Regular->add('alloptions', Array, 'options', 0) #4 /xxxx/wzfou.com/wp- content/object-cache.php(95): W3TCObjectCache_WpObjectCache->add('alloptions', Array, 'options', 0) #5 /xxxx/wzfou.com/wp-includes/option.php(258): في /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php على السطر 68

رسالة الخطأ: "لم يتم اكتشاف RedisException: أمر OOM غير مسموح به عند استخدام الذاكرة > 'maxmemory'. في /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php"، من الواضح أن Redis قيد التشغيل تسبب التخزين المؤقت للكائن في الخطأ. عرض تكوين Redis:

root@localhost:~# redis-cli
127.0.0.1:6379> ذاكرة المعلومات
# الذاكرة
used_memory:250161160
used_memory_human:238.57M
used_memory_rss:274608128
used_memory_rss_human:261.89 M
used_memory_peak:254227888
used_memory_peak_human:242.45M
used_memory_peak_perc:98.40%
used_memory_overhead:7712830
used_memory_startup:803088
used_memory_dataset:2424 48330
used_memory_dataset_perc:97.23%
المخصص_المخصص:250366144
allocator_active:260894720
allocator_resident:268197888
total_system_memory:2111430656
total_system_memory_human:1.97G
used_memory_lua:37888
استخدام _memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human :0B
number_of_cached_scripts:0
maxmemory:251000000
maxmemory_human:239.37M
maxmemory_policy:noeviction
allocator_frag_ratio:1.04
allocator_frag_bytes:1 0528576
تخصيص نسبة ator_rss:1.03
allocator_rss_bytes: 7303168
rss_overhead_ratio:1.02
rss_overhead_bytes:6410240
mem_fragmentation_ratio:1.10
mem_fragmentation_bytes:24487992
mem_not_counted_for_evict:0
سجل mem_replication_back:0
mem_clients_slaves:0
mem_clients_normal:390678
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
127.0.0.1:6379>

يمكن رؤيته من التكوين: الذاكرة المشغولة use_memory_human:238.57M، الحد الأقصى للذاكرة التي يسمح بها نظام Redis هو: maxmemory_human:239.37M، إنها بالفعل مشغولة وقد اختفت المساحة.

3. حل مشكلة عدم كفاية ذاكرة Redis

إذا كنت تستخدم Oneinstack، فيمكنك الرجوع إلى الطريقة التالية لتعديل تكوين Redis وبالمناسبة، يمكنك أيضًا تعديل تكوين Memcached لزيادة الذاكرة الافتراضية:

#Redis默认端口:6379
#Memcached默认端口:11211
#默认监听地址:127.0.0.1

#调整Redis最大内存大小?

vi /usr/local/redis/etc/redis.conf

maxmemory 1024000000#单位字节,默认1G,可调整

service redis-server restart#重启生效

#增加Memcached最大内存大小?

vi/etc/init.d/memcached

CACHESIZE=256 #单位M,默认256M,可调整

service memcached restart#重启生效

قم بتعيين سياسة الإزالة: maxmemory-policy volatile-lru

يتم وصف العديد من استراتيجيات الإزالة الأخرى أدناه:

noevection

السياسة الافتراضية

لم يتم طردهم

عندما لا تكون هناك ذاكرة كافية ليستخدمها Redis، سيتم الإبلاغ عن استثناء عند تنفيذ أمر الكتابة: redis.exceptions.ResponseError، أمر OOM غير مسموح به عند استخدام الذاكرة > 'maxmemory'

volatile-lru

بالنسبة للمفاتيح منتهية الصلاحية، قم بتنفيذ استراتيجية الحذف lru (احذف البيانات الأقل استخدامًا مؤخرًا)

إذا لم يكن هناك مفتاح منتهي الصلاحية، فسيتم الإبلاغ عن استثناء عند تنفيذ أمر الكتابة عندما تكون الذاكرة غير كافية: redis.exceptions.ResponseError، أمر OOM غير مسموح به عند استخدام الذاكرة> "maxmemory"، نفس سياسة noevection

allkeys-lru

تنفيذ lru لجميع المفاتيح

لا توجد طريقة لتقييد بعض الخوارزميات لحذف مفاتيح معينة.

إذا كان تطبيقك يحتاج إلى الاحتفاظ ببعض البيانات، فيرجى عدم استخدام استراتيجية allkeys-lru

متقلبة عشوائية

بالنسبة للمفاتيح منتهية الصلاحية، حدد مفتاحًا عشوائيًا لطرده

allkeys-عشوائي

بالنسبة لجميع المفاتيح، حدد بشكل عشوائي مفتاحًا لطرده

متقلبة-ttl

من بين المفاتيح منتهية الصلاحية، سيتم حذف المفتاح الذي له أصغر قيمة ttl أولاً.

4. ملخص

يعد تسريع تحسين WordPress موضوعًا شائعًا لتحقيق أفضل النتائج، وغالبًا ما نحتاج إلى ضبط استراتيجية التحسين بشكل معقول بناءً على التكوين الفعلي لخادمنا.

فيما يتعلق بتحسين وتسريع المدونة، فقد كتبت موضوعًا موجزًا: تقنيات التطبيق الرئيسية والميزات الداعمة للمدونات - ملخص طرق تحسين موقع الويب والخادم للمدونة.

اترك رد