Aracılığıyla paylaş


Azure Batch'te hata işleme ve algılama

Bazen Azure Batch çözümünüzdeki görev ve uygulama hatalarını işlemeniz gerekebilir. Bu makalede farklı Batch hataları türleri ve yaygın sorunların nasıl çözüleceğini açıklanmaktadır.

Hata kodları

Batch'te görebileceğiniz bazı genel hata türleri şunlardır:

  • Batch'e hiç ulaşmamış istekler için ağ hataları veya Batch yanıtının istemciye zamanında ulaşmadığı durumlarda ağ hataları.
  • İç sunucu hataları. Bu hataların standart 5xx durum kodu HTTP yanıtı vardır.
  • Sınırlama ile ilgili hatalar. Bu hatalar, 429 üst bilgisine sahip 503 veya Retry-after durum kodlu HTTP yanıtlarını içerir.
  • 4xx gibi hatalar AlreadyExists ve InvalidOperation. Bu hatalar kaynağın durum geçişi için doğru durumda olmadığını gösterir.

Belirli hata kodları hakkında ayrıntılı bilgi için bkz . Batch durumu ve hata kodları. Bu başvuru REST API, Batch hizmeti ve iş görevleri ile zamanlama için hata kodlarını içerir.

Uygulama hataları

Yürütme sırasında bir uygulama tanılama çıkışı üretebilir. Sorunları gidermek için bu çıkışı kullanabilirsiniz. Batch hizmeti, işlem düğümündeki görev dizinindeki stdout.txt ve stderr.txt dosyalarına standart çıktı ve standart hata çıkışı yazar. Daha fazla bilgi için bkz. Batch'te dosyalar ve dizinler.

Bu çıkış dosyalarını indirmek için Azure portalını veya Batch SDK'larından birini kullanın. Örneğin, sorun giderme amacıyla dosyaları almak için Batch .NET kitaplığında ComputeNode.GetNodeFile ve CloudTask.GetNodeFile kullanın.

Görev hataları

Görev hataları birkaç kategoriye ayrılır.

Ön işleme hataları

Bir görev başlatılamazsa, görev için bir ön işleme hatası ayarlanır. Ön işleme hataları şu durumlarda oluşabilir:

  • Görevin kaynak dosyaları taşındı.
  • Depolama hesabı artık kullanılamıyor.
  • Dosyaların düğüme başarıyla kopyalanmasını engelleyen başka bir sorun oluştu.

Dosya yükleme hataları

Bir görev için belirttiğiniz dosyalar herhangi bir nedenle karşıya yüklenemezse, görev için bir dosya yükleme hatası ayarlanır. Dosya yükleme hataları şu durumlarda oluşabilir:

  • Azure Depolama'ya erişmek için sağlanan paylaşılan erişim imzası (SAS) belirteci geçersiz.
  • SAS belirteci, yazma yetkisi sağlamaz.
  • Depolama hesabı artık kullanılamıyor.
  • Dosyaların düğümden başarıyla kopyalanmasını engelleyen bir sorun daha oluştu.

Uygulama hataları

Görevin komut satırı tarafından belirtilen işlem de başarısız olabilir. Daha fazla bilgi için bkz . Görev çıkış kodları.

Uygulama hataları için Batch'i görevi otomatik olarak belirtilen sayıda yeniden deneyecek şekilde yapılandırın.

Kısıtlama hataları

Bir iş veya görevin yürütme süresi üst sınırını belirtmek için kısıtlamayı maxWallClockTime ayarlayın. İlerlemesi başarısız olan görevleri sonlandırmak için bu ayarı kullanın.

Görev maksimum süreyi aştığında:

  • Görev tamamlandı olarak işaretlenir.
  • Çıkış kodu olarak 0xC000013Aayarlanır.
  • schedulingError alanı olarak { category:"ServerError", code="TaskEnded"}işaretlenir.

Görev çıkış kodları

Bir görev bir işlemi yürüttüğünde Batch, görevin çıkış kodu özelliğini işlemin dönüş koduyla doldurur. İşlem sıfır olmayan bir çıkış kodu döndürürse Batch hizmeti görevi başarısız olarak işaretler.

Batch hizmeti bir görevin çıkış kodunu belirlemez. İşlemin kendisi veya işlemin yürütüleceği işletim sistemi çıkış kodunu belirler.

Görev hataları veya kesintileri

Görevler bazen başarısız olabilir veya kesintiye uğrayabilir. Örneğin:

  • Görev uygulamasının kendisi başarısız olabilir.
  • Görevin üzerinde çalıştığı düğüm yeniden başlatılabilir.
  • Yeniden boyutlandırma işlemi düğümü havuzdan kaldırabilir. Havuzun serbest bırakma politikası, görevlerin tamamlanmasını beklemeden düğümleri hemen kaldırırsa, bu eylem gerçekleşebilir.

Her durumda Batch, görevi başka bir düğümde yürütülmesi için otomatik olarak yeniden sıraya alabilir.

Aralıklı bir sorunun görevin yanıt vermeyi durdurmasına veya yürütülmesinin çok uzun sürmesine neden olması da mümkündür. Bir görev için maksimum yürütme aralığı ayarlayabilirsiniz. Bir görev aralığı aşarsa, Batch hizmeti görev uygulamasını kesintiye uğratır.

İşlem düğümlerine bağlanma

İşlem düğümünde uzaktan oturum açarak hata ayıklama ve sorun giderme işlemleri gerçekleştirebilirsiniz. Azure portalını kullanarak Windows düğümleri için bir Uzak Masaüstü Protokolü (RDP) dosyası indirin ve Linux düğümleri için Secure Shell (SSH) bağlantı bilgilerini alın. Bu bilgileri Batch .NET veya Batch Python API'lerini kullanarak da indirebilirsiniz.

RDP veya SSH aracılığıyla bir düğüme bağlanmak için önce düğümde bir kullanıcı oluşturun. Aşağıdaki yöntemlerden birini kullanın:

Gerekirse işlem düğümlerine erişimi yapılandırın veya devre dışı bırakın.

Sorun düğümlerini giderme

Batch istemci uygulamanız veya hizmetiniz, bir sorun düğümünü tanımlamak için başarısız görevlerin meta verilerini inceleyebilir. Havuzdaki her düğümün benzersiz bir kimliği vardır. Görev meta verileri, görevin çalıştığı düğümü içerir. Sorun düğümünü bulduklarından sonra, hatayı çözmek için aşağıdaki yöntemleri deneyin.

Düğümü yeniden başlat

Düğümü yeniden başlatmak bazen takılma veya kilitlenme işlemleri gibi gizli sorunları düzeltir. Havuzunuz bir başlangıç görevi kullanıyorsa veya işiniz bir iş hazırlama görevi kullanıyorsa, düğüm yeniden başlatıldığında bu görevler yürütülür.

Düğümü yeniden oluşturma

Düğümü yeniden görüntülemek işletim sistemini yeniden yükler. Yeniden görüntüleme işleminden sonra, görevleri başlatma ve iş hazırlama görevleri yeniden çalıştırılır.

Düğümü havuzdan kaldır

Düğümün havuzdan kaldırılması bazen gereklidir.

Düğümde görev zamanlamayı devre dışı bırak

Bir düğümde görev zamanlamasını devre dışı bırakmak düğümü etkili bir şekilde çevrimdışına alır. Batch, düğüme daha fazla görev atamaz. Ancak düğüm havuzda çalışmaya devam eder. Ardından başarısız olan görevin verilerini kaybetmeden hataları daha fazla araştırabilirsiniz. Düğüm ayrıca daha fazla görev hatasına neden olmaz.

Örneğin, düğümde görev zamanlamasını devre dışı bırakın. Ardından düğümde uzaktan oturum açın. Olay günlüklerini inceleyin ve diğer sorun gidermeleri yapın. Sorunları çözdükten sonra düğümü yeniden çevrimiçi duruma getirmek için görev zamanlamasını yeniden etkinleştirin.

Düğümde çalışmakta olan Batch işleme görevlerini belirtmek için bu eylemleri kullanabilirsiniz. Örneğin, Batch .NET API'siyle görev zamanlamayı devre dışı bırakırken DisableComputeNodeSchedulingOption için bir sabit listesi değeri belirtebilirsiniz. Şunları yapmayı seçebilirsiniz:

  • Çalışan görevleri sonlandır: Terminate
  • Diğer düğümlerde zamanlamak için görevleri yeniden sıraya al: Requeue
  • Eylemi gerçekleştirmeden önce devam eden görevlerin tamamlanmasına izin verin: TaskCompletion

Hatadan sonra yeniden deneyin

Batch API'leri hatalarla ilgili sizi bilgilendirir. Yerleşik genel yeniden deneme işleyicisini kullanarak tüm API'leri yeniden deneyebilirsiniz. Bu seçeneği kullanmak en iyi yöntemdir.

Bir hatadan sonra yeniden denemeden önce birkaç saniye bekleyin. Çok sık veya çok hızlı bir şekilde yeniden denerseniz, yeniden deneme işleyicisi istekleri kısıtlar.

Sonraki adımlar