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 httpRetry-after
yanıtlarını durum kodu olarak içerir429
. -
4xx
veInvalidOperation
gibiAlreadyExists
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
0xC000013A
ayarlanı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:
- Azure portalı
- Batch REST API: adduser
- Batch .NET API: ComputeNode.CreateComputeNodeUser
- Batch Python modülü: add_user
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.
- Batch REST API: yeniden başlatma
- Batch .NET API: ComputeNode.Reboot
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.
- Batch REST API: reimage
- Batch .NET API: ComputeNode.Reimage
Düğümü havuzdan kaldırma
Düğümü havuzdan kaldırmak bazen gereklidir.
- Batch REST API: removenodes
- Batch .NET API: PoolOperations
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 REST API: enablescheduling
- Batch .NET API: ComputeNode.EnableScheduling
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.