معالجة الأخطاء في Azure Batch والكشف عنها

في بعض الأحيان، قد تحتاج إلى معالجة حالات فشل المهام والتطبيقات في حل Azure Batch. تشرح هذه المقالة الأنواع المختلفة من أخطاء Batch، وكيفية حل المشكلات الشائعة.

رموز الخطأ

بعض أنواع الأخطاء العامة التي قد تراها في Batch هي:

  • فشل الشبكات للطلبات التي لم تصل أبدا إلى Batch، أو فشل الشبكات عندما لا تصل استجابة Batch إلى العميل في الوقت المناسب.
  • أخطاء الخادم الداخلية. تحتوي هذه الأخطاء على استجابة HTTP للتعليمة البرمجية للحالة القياسية 5xx.
  • الأخطاء المرتبطة بالتقييد. تشمل هذه الأخطاء استجابات HTTP للتعليمة البرمجية للحالة 429 أو 503 مع الرأس Retry-after.
  • أخطاء 4xx مثل AlreadyExists وInvalidOperation. تشير تلك الأخطاء إلى أن المورد ليس في الحالة الصحيحة لانتقال الحالة.

للحصول على معلومات مفصلة حول رموز خطأ معينة، راجع حالة الدفعة ورموز الخطأ. يتضمن هذا المرجع رموز الخطأ لواجهة برمجة تطبيقات REST وخدمة Batch والمهام الوظيفية والجدولة.

فشل التطبيق

خلال التنفيذ، قد ينتج عن التطبيق إخراج تشخيصي. يمكنك استخدام هذا الإخراج لاستكشاف المشكلات وإصلاحها. تكتب خدمة Batch الإخراج القياسي وإخراج الخطأ القياسي إلى stdout.txt وملفات stderr.txt في دليل المهام على عقدة الحساب. لمزيد من المعلومات، انظر الملفات والدلائل في Batch.

لتنزيل ملفات الإخراج هذه، استخدم مدخل Microsoft Azure أو إحدى SDK لـ Batch. على سبيل المثال، لاسترداد الملفات من أجل أغراض استكشاف الأخطاء وإصلاحها، استخدم ComputeNode.GetNodeFile وCloudTask.GetNodeFile في مكتبة .NET لـ Batch.

أخطاء المهمة

تندرج أخطاء المهمة في عدة فئات.

أخطاء ما قبل المعالجة

إذا فشلت مهمة في البدء، يتم تعيين خطأ ما قبل المعالجة للمهمة. يمكن أن تحدث أخطاء ما قبل المعالجة إذا:

  • تم نقل ملفات الموارد المتعلقة بالمهمة.
  • لم يعد حساب التخزين متوفرًا بعد الآن.
  • حدثت مشكلة أخرى حالت دون النسخ الناجح للملفات إلى العقدة.

أخطاء تحميل الملف

إذا أخفقت الملفات التي حددتها لمهمة في التحميل لأي سبب، فسيتم تعيين خطأ في تحميل الملف للمهمة. يمكن أن تحدث الأخطاء في تحميل الملفات إذا:

  • كان الرمز المميز لتوقيع الوصول المشترك (SAS) المقدم للوصول إلى Azure Storage غير صالح.
  • كان رمز SAS المميز لا يوفر أذونات الكتابة.
  • لم يعد حساب التخزين متوفرًا بعد الآن.
  • حدثت مشكلة أخرى حالت دون النسخ الناجح للملفات من العقدة.

أخطاء التطبيق

يمكن أن تفشل العملية المحددة بواسطة سطر أوامر المهمة أيضا. لمزيد من المعلومات، انظر التعليمات البرمجية للخروج للمهمة.

بالنسبة إلى أخطاء التطبيق، قم بتكوين Batch لإعادة محاولة المهمة تلقائيًا حتى عدد محدد من المرات.

أخطاء القيد

لتحديد الحد الأقصى لمدة التنفيذ لوظيفة أو مهمة، قم بتعيين القيد maxWallClockTime . استخدم هذا الإعداد من أجل إنهاء المهام التي تفشل في التقدم.

عند تجاوز المهمة الحد الأقصى للوقت:

  • يتم وضع علامة على المهمة على أنها مكتملة.
  • يتم تعيين التعليمة البرمجية للخروج إلى 0xC000013A.
  • يتم وضع علامة على الحقل schedulingError على أنه { category:"ServerError", code="TaskEnded"}.

التعليمات البرمجية للخروج الخاصة بالمهمة

عند قيام مهمة بتنفيذ عملية، تقوم "الدُفعة" بملأ خاصية التعليمة البرمجية للخروج بالتعليمة البرمجية للإرجاع الخاصة بالعملية. إذا قامت العملية بإرجاع تعليمة برمجية للخروج غير صفرية، فإن خدمة Batch تضع علامة على المهمة على أنها فاشلة.

لا تحدد خدمة Batch التعليمة البرمجية للخروج للمهمة. تحدد العملية نفسها، أو نظام التشغيل الذي تنفذ العملية عليه، رمز الخروج.

فشل المهام أو انقطاعها

قد تفشل المهام أحياناً أو تتم مقاطعتها. على سبيل المثال:

  • قد يفشل تطبيق المهمة ذاته.
  • قد تتم إعادة تشغيل العقدة التي تعمل عليها المهمة.
  • قد تؤدي عملية تغيير الحجم إلى إزالة العقدة من التجمع. قد يحدث هذا الإجراء إذا قام نهج إلغاء تخصيص التجمع بإزالة العقد على الفور دون انتظار انتهاء المهام.

في كافة الحالات، يمكن أن يقوم Batch تلقائيًا بإعادة إضافة المهمة إلى قائمة انتظار التنفيذ على عقدة أخرى.

من الممكن أيضًا أن تتسبب مشكلة متقطعة في توقف المهمة عن الاستجابة أو استغراق وقت طويل للتنفيذ. يمكنك تعيين الحد الأقصى للفاصل الزمني للتنفيذ لمهمة ما. إذا تجاوزت المهمة الفاصل الزمني، فستقاطع خدمة Batch تطبيق المهمة.

الاتصال بعُقد الحساب

يمكنك إجراء تصحيح الأخطاء واستكشاف الأخطاء وإصلاحها عن طريق تسجيل الدخول إلى عقدة حساب عن بعد. استخدم مدخل Microsoft Azure لتنزيل ملف بروتوكول سطح المكتب البعيد (RDP) لعُقد Windows، واحصل على معلومات اتصال Secure Shell (SSH) لعُقد Linux. يمكنك أيضًا تنزيل هذه المعلومات باستخدام واجهات برمجة تطبيقات .NET لـ Batch أو Python لـ Batch.

للاتصال بعقدة عبر RDP أو SSH، قم أولاً بإنشاء مستخدم على العقدة. استخدم أحد الأساليب التالية:

إذا لزم الأمر، قم بتكوين أو تعطيل الوصول إلى عقد الحوسبة.

استكشاف مشاكل العقد وإصلاحها

يمكن لتطبيق عميل أو خدمة Batch فحص بيانات التعريف للمهام الفاشلة لتحديد عقدة مشكلة. كل عقدة في تجمع لها معرّف فريد. تشمل بيانات تعريف للمهمة العقدة حيث يتم تشغيل المهمة. بعد العثور على عقدة المشكلة، جرب الأساليب التالية لحل الفشل.

إعادة تشغيل العقدة

تؤدي إعادة تشغيل عقدة أحيانًا إلى إصلاح المشكلات الكامنة، مثل العمليات العالقة أو المتعطلة. إذا كان التجمع يستخدم مهمة بدء أو إذا كانت وظيفتك تستخدم مهمة إعداد وظيفة، فإن إعادة تشغيل العقدة تنفذ هذه المهام.

  • واجهة برمجة تطبيقات REST لـ Batch: reboot
  • واجهة برمجة تطبيقات .NET لـ Batch: ComputeNode.Reboot

إعادة تعيين العقدة

تؤدي إعادة تعيين عقدة إلى إعادة تثبيت نظام التشغيل. تتم إعادة تشغيل مهام البدء ومهام إعداد الوظائف بعد حدوث إعادة التعيين.

  • واجهة برمجة تطبيقات REST لـ Batch: reimage
  • واجهة برمجة تطبيقات .NET لـ Batch: ComputeNode.Reimage

إزالة عقدة من التجمع

من الضروري أحيانًا إزالة العقدة من التجمع.

تعطيل الجدولة للمهام على العقدة

يؤدي تعطيل الجدولة للمهام على عقدة إلى جعل العقدة في وضع عدم الاتصال بشكل فعال. لا يعين Batch أي مهام أخرى إلى العقدة. ومع ذلك، يستمر تشغيل العقدة في التجمع. يمكنك بعد ذلك إجراء مزيد من التحقيق في حالات الفشل دون فقدان بيانات المهمة الفاشلة. لن تتسبب العقدة أيضا في المزيد من حالات فشل المهام.

على سبيل المثال، قم بتعطيل الجدولة للمهام على العقدة. بعد ذلك قم بتسجيل الدخول إلى العقدة عن بُعد. افحص سجلات الأحداث وقم بإجراء عمليات أخرى لاستكشاف الأخطاء وإصلاحها. بعد حل المشكلات، قم بتمكين الجدولة للمهام مرة أخرى لإعادة توصيل العقدة بالإنترنت.

يمكنك استخدام هذه الإجراءات لتحديد مهام معالجة Batch التي تعمل حاليًا على العقدة. على سبيل المثال، عند تعطيل الجدولة للمهام باستخدام واجهة برمجة تطبيقات .NET لـ Batch، يمكنك تحديد قيمة التعداد لـ DisableComputeNodeSchedulingOption. يمكنك اختيار:

  • إنهاء المهام قيد التشغيل: Terminate
  • أعد ترتيب المهام للجدولة على العقد الأخرى: Requeue
  • السماح بإكمال المهام قيد التشغيل قبل تنفيذ الإجراء: TaskCompletion

إعادة المحاولة بعد الأخطاء

تُعلمك واجهات برمجة تطبيقات Batch بحالات الفشل. يمكنك إعادة محاولة كافة واجهات برمجة التطبيقات باستخدام معالج إعادة المحاولة العام المدمج. من أفضل الممارسات هي استخدام هذا الخيار.

بعد حالة فشل، انتظر عدة ثوان قبل أن تعيد المحاولة. إذا قمت بإعادة المحاولة بشكل متكرر جدًا أو بسرعة كبيرة جدًا، يقوم معالج إعادة المحاولة بتقييد الطلبات.

الخطوات التالية