Azure Batch'de 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 hata 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ı istemciye zamanında ulaşmadığında ağ hataları.
  • İç sunucu hataları. Bu hataların standart 5xx durum kodu HTTP yanıtı vardır.
  • Azaltmayla ilgili hatalar. Bu hatalar, veya 503 üst bilgiyle http Retry-after yanıtlarını durum kodu olarak içerir429.
  • 4xxve InvalidOperationgibi AlreadyExists hatalar. 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 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ı çeşitli kategorilere ayrılır.

Ön işleme hataları

Bir görev çalışmadığında ön işleme hatası belirlenir. Ö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.

Karşıya 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 izinleri sağlamaz.
  • Depolama hesabı artık kullanılamıyor.
  • Düğümden dosyaların başarıyla kopyalanmasını engelleyen başka bir sorun 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 en uzun yürütme süresini 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üş kodu ile 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 zaman zaman başarısız olabilir veya kesintiye uğrayabilir. Örnek:

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

Her durumda Batch, görevi başka bir düğümde yürütülmeye yönelik olarak otomatik olarak yeniden sorgulayabilir.

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 en yüksek yürütme aralığını 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. windows düğümleri için uzak masaüstü protokolü (RDP) dosyasını indirmek ve Linux düğümleri için Secure Shell (SSH) bağlantı bilgilerini almak için Azure portal kullanı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ü buldukktan sonra, hatayı çözmek için aşağıdaki yöntemleri deneyin.

Düğümü yeniden başlatma

Düğümü yeniden başlatmak bazen takılmış veya kilitlenmiş işlemler 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şlatma işlemi bu görevleri yürütür.

Düğümü yeniden oluşturma

Düğümü yeniden görüntülemek işletim sistemini yeniden yükler. Yeniden oluşturma işlemi tamamlandıktan sonra görevleri ve iş hazırlama görevlerini yeniden çalıştırın.

Düğümü havuzdan kaldırma

Düğümü havuzdan kaldırmak bazen gereklidir.

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

Düğümde görev zamanlamasını devre dışı bırakmak düğümü etkili bir şekilde çevrimdışına alır. Batch düğüme başka görev atamaz. Ancak düğüm havuzda çalışmaya devam eder. Ardından başarısız 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 başka sorun gidermeler yapın. Sorunları çözdükten sonra düğümü yeniden çevrimiçi duruma getirmek için görev zamanlamasını yeniden etkinleştirin.

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

  • Çalışan görevleri sonlandır: Terminate
  • Diğer düğümlerde zamanlamaya yönelik görevleri yeniden sorgula: Requeue
  • Eylemi gerçekleştirmeden önce çalışan görevlerin tamamlanmasına izin verin: TaskCompletion

Hatadan sonra yeniden deneme

Batch API'leri hataları size bildirir. 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