معالجة خطأ Redis «OOM command not allowed»
لـ Redis حد ذاكرة خاص به منفصل عن حد حسابك. وحين تمتلئ الذاكرة المؤقتة تفشل الكتابات بهذا الخطأ حتى تُمسح أو يُرفع الحد.
يعيد موقعك:
PHP Fatal error: Uncaught RedisException: OOM command not allowed
when used memory > 'maxmemory'ينطبق على الاستضافة المشتركة والموزِّعة التي تستخدم التخزين المؤقت للكائنات بـ Redis.
فقد نفدت الذاكرة المخصّصة لـ Redis وهو يرفض الكتابات الجديدة.
لماذا هذا منفصل عن ذاكرة باقتك
وهذا ما يوقع الناس: فحد ذاكرة Redis ليس حد ذاكرة حسابك.
| ينطبق على | الافتراضي | |
|---|---|---|
| ذاكرة LVE (PMEM) | عمليات حسابك | تحدّدها باقتك |
maxmemory في Redis | الذاكرة المؤقتة لـ Redis وحدها | 32 ميغابايت |
فقد يكون لديك متسع كبير في ذاكرة الحساب وتبلغ سقف Redis رغم ذلك. فهما رقمان لا علاقة بينهما.
عالجه الآن
أعد تشغيل Redis لمسح الذاكرة المؤقتة. في cPanel، افتح Redis، وعطّله، ثم فعّله من جديد.
والبيانات المخزّنة تُولَّد عند الطلب، فلا يضيع شيء — وتكون الطلبات الأولى بعدها أبطأ بينما تمتلئ الذاكرة من جديد.
امنع تكراره
المسح إجراء مؤقت. فامتلاء 32 ميغابايت له سبب:
قلّل ما يُخزَّن. في LiteSpeed Cache، ضمن Cache ← Object، راجع Do Not Cache Groups. فبيانات الجلسات ومحتويات السلة في متجر مزدحم تملأ Redis سريعًا وتستفيد من وجودها هناك أقل من غيرها.
اخفض عمر الكائن. فمدة الصلاحية الافتراضية 360 ثانية. وتقصيرها يعني انتهاء المدخلات قبل امتلاء الذاكرة.
افحص وجود حلقة تخزين. فإضافة تكتب مفتاحًا فريدًا مع كل طلب — ختمًا زمنيًا أو معرّف جلسة في المفتاح — تملأ أي ذاكرة مهما كان حجمها. فإن امتلأ Redis خلال دقائق من مسحه، فهذا هو السبب.
اطلب المزيد. إن كان الموقع يحتاج ذاكرة أكبر فعلًا، فافتح تذكرة مع رقم الدعم السري. فالحد مضبوط من جهة الخادم، ولا تستطيع رفعه بنفسك.
تأكّد أنه نجح
في ووردبريس، تعرض LiteSpeed Cache ← Cache ← Object حالة الاتصال واستخدام الذاكرة الحالي. راقبها بعد المسح: فالامتلاء التدريجي عبر ساعات طبيعي، أما الامتلاء خلال دقائق فحلقة تخزين.