في الليلة الماضية، واجه خط إنتاجنا مشكلة غريبة: كان ComfyUI يستجيب لطلبات HTTP بشكل طبيعي، وكانت قائمة المهام تعمل، لكن GPU لم يكن يستهلك أي موارد على الإطلاق. توقفت جميع عمليات الريندر دون أي رسالة خطأ واضحة. هذه الملاحظة تروي قصة حالة "wedge" وسلسلة الاستعادة التلقائية التي أضفناها إلى خط الإنتاج.
أعراض الـ wedge التي واجهناها
ظهرت ثلاث علامات معًا:
- عملية الخادم لا تزال حية وتستجيب لطلبات HTTP على جميع نقاط النهاية
- قائمة المهام "تبدو" وكأنها تعمل، لكن لا تتدفق أي عمليات ريندر
- قيمة استخدام GPU (gpu_util) تبقى عند الصفر لأكثر من 60 ثانية متتالية رغم وجود مهام في القائمة
هذه الحالة أكثر خطورة من الانهيار الكامل، لأن أنظمة المراقبة التي تتحقق فقط من "هل يستجيب؟" ستعتبر كل شيء طبيعيًا بينما الإنتاج متوقف تمامًا.
طريقة الكشف: لا تعتمد على HTTP وحدها
الدرس المهم هو أن فحص الصحة يجب أن يقيس "هل تتدفق المهام؟" وليس فقط "هل يستجيب الخادم؟". لذلك أضفنا مراقبة قيمة gpu_util — إذا كانت القائمة تحتوي على مهام لكن gpu_util تبقى عند الصفر لأكثر من 60 ثانية متتالية، يعتبر النظام أن هناك wedge ويبدأ خطوات الاستعادة فورًا.
سلسلة COMFY_HEAL
عند اكتشاف wedge، يتدرج النظام عبر خطوات الاستعادة واحدة تلو الأخرى، بحد أقصى زمني قدره 180 ثانية لكل دورة، لمنع إعادة التشغيل اللانهائية:
| الخطوة | الإجراء | الشرط |
|---|---|---|
| 1 | إعادة تشغيل العملية المتأثرة فقط (تحديد بواسطة PID وليس الاسم) | اكتشاف wedge على GPU الرئيسي |
| 2 | التبديل إلى GPU احتياطي على نفس الجهاز | عدم استعادة العمل بعد إعادة التشغيل |
| 3 | إلغاء جميع المهام بأمان وإشعار الفريق | فشل الخطوتين الأوليين |
النقطة الأكثر حساسية هي إعادة التشغيل — يجب إغلاق عملياتنا فقط، وتحديد موقعها بواسطة PID. لا نستخدم أبدًا اسم البرنامج للإغلاق لأن هناك عدة خدمات بأسماء مشابهة على نفس الجهاز.
نتائج الاختبار
- اجتاز الاختبار الذاتي غير المتصل جميع الحالات الستة 6/6 (الكشف، إعادة التشغيل، الفحص مرة أخرى، التبديل الاحتياطي، الحد الزمني، الإلغاء الآمن)
- تم التحقق من آلية إعادة التشغيل في حدث حقيقي أثناء إنتاج مقطع فيديو — تمت إعادة معالجة المهمة المتوقفة وبثها بشكل طبيعي
- بعد الاستعادة، عاد استخدام gpu_util إلى 96% خلال دقيقتين
الخطوات التالية
الخطوة التالية هي تطبيق فحص الصحة هذا الذي يقيس "تدفق المهام" على الخدمات الأخرى في الأسطول بأكمله، بالإضافة إلى تسجيل إحصائيات أسبوعية لحالات wedge لمعرفة ما إذا كانت هذه الحالة مرتبطة بأنواع معينة من المهام — تابعوا ذلك في ملاحظات المختبر القادمة.