Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, Dayanıklı İşlevler uygulamalarında yaygın senaryolarda sorun gidermenize yardımcı olur. Aşağıdaki listede belirtinizi bulun ve sorunu tanılamak ve çözmek için bağlantılı adımları izleyin.
Yaygın belirtiler
- Orkestrasyon Bekleme durumunda takıldı
- Düzenleme işlemleri uzun bir gecikmeden sonra başlar
- Orkestrasyon Çalışma durumunda takıldı
- Düzenlemenin tamamlanması beklenenden uzun sürüyor
- Tüketim planındaki bağlantı hataları
Application Insights'ta çalıştırabileceğiniz KQL tanılama sorguları için bkz. Dayanıklı İşlevler tanılama için Örnek KQL sorguları.
Orkestrasyon Pending durumunda sıkıştı
Orkestrasyonu başlattığınızda, Dayanıklı uzantı tarafından yönetilen dahili bir kuyruğa "başlat" mesajı yazılır ve orkestrasyonun durumu "Beklemede" olarak ayarlanır. Kullanılabilir bir uygulama örneği düzenleme iletisini alıp başarıyla işledikten sonra, durum "Çalışıyor" durumuna (veya "Beklemede olmayan" başka bir duruma) geçer.
"Beklemede" durumunda süresiz olarak takılı kalan düzenleme örneklerinin sorunlarını gidermek için bu adımları izleyin.
Etkilenen düzenleme örneği kimliğiyle ilgili uyarılar veya hatalar için Dayanıklı Görev Çerçevesi izlemelerini denetleyin. Örneğinizle ilgili hataları aramak için Application Insights'taki Hataları ve uyarıları izleme sorgusunu kullanın.
Azure Depolama'daki kontrol kuyruklarını kontrol edin ve orkestrasyonun "başlangıç mesajının" hala kuyrukta olup olmadığını görün. Azure portalında depolama hesabınıza gidin, Queues öğesini seçin ve
controlön ekine sahip kuyrukları arayın. Denetim kuyruklarının nasıl çalıştığına ilişkin arka plan için Azure Depolama sağlayıcı denetim kuyruğu belgelerine bakın.Uygulamanızın platform yapılandırmasını64 Bit olarak değiştirin. Uygulamada bellek yetersiz olduğundan düzenleme işlemleri bazen başlatılamaz. 64 bit işleme geçmek, uygulamanın daha fazla toplam bellek ayırmasına olanak tanır. Bu değişiklik yalnızca App Service Temel, Standart, Premium ve Elastik Premium planları için geçerlidir. Ücretsiz veya Tüketim planları 64 bit işlemleri desteklemez .
Düzenleme işlemleri uzun bir gecikmeden sonra başlar
Normalde, düzenlemeler zamanlandıktan sonra birkaç saniye içinde başlar. Ancak bazı durumlarda düzenlemelerin başlatılması daha uzun sürebilir. Orkestrasyonların başlamasının birkaç saniyeyi aşması durumunda bu adımları izleyerek sorunları giderin.
Gecikmenin bölüm yeniden dengeleme veya zamanlayıcı tabanlı yoklama aralıkları gibi Azure Depolama sağlayıcısının <0> bilinen sınırlaması ile eşleşip eşleşmediğini denetleyin.
Etkilenen orkestrasyon örneği kimliğiyle ilgili uyarılar veya hatalar için Dayanıklı Görev Çerçevesi izlemelerini denetleyin. Örneğinizle ilgili hataları aramak için Application Insights'taki Hataları ve uyarıları izleme sorgusunu kullanın.
Orkestrasyon Running durumunda sıkıştı
Düzenleme durumunuz beklenenden uzun süre "Çalışıyor" olarak görünüyorsa veya ilerlemeyi durdurmuş gibi görünüyorsa, düzenleme büyük olasılıkla tamamlanmamış bir görevi bekliyordur. Örneğin, dayanıklı bir zamanlayıcıyı, bir iş akışı görevini veya harici bir olayı bekliyor olabilir. Zamanlanmış görevler başarıyla tamamlandıysa ancak düzenleme hala ilerlemiyorsa, sonraki adımına geçmesini engelleyen bir sorun olabilir. Bu durumdaki düzenlemelere genellikle "takılmış düzenleme" adı verilir.
Takılan düzenleme sorunlarını gidermek için şu adımları izleyin:
İşlev uygulamasını yeniden başlatmayı deneyin. Bu adım, düzenlemenin uygulama veya uzantı kodundaki geçici bir hata veya kilitlenme nedeniyle takılması durumunda yardımcı olabilir.
Azure Depolama hesap kontrol kuyruklarını inceleyerek herhangi bir kuyruğun sürekli büyüyüp büyümediğini kontrol edin. Düzenleme iletilerinin sıralanmasıyla ilgili sorunları belirlemek için Application Insights'ta Azure Depolama mesajlaşma sorgusu kullanın. Sorun yalnızca tek bir denetim kuyruğuna etki ederse, belirli bir uygulama örneğinde bir sorun olduğunu gösterebilir. Bu durumda, iyi durumda olmayan VM örneğinden uzaklaşmak için ölçeği artırmak veya küçültmek yararlı olabilir.
Azure Depolama mesajlaşma sorgusu sonuçlarını sıra adına göre Bölüm Kimliği olarak filtreleyerek ilgili denetim kuyruğu bölümüyle ilgili sorunları arayın.
Dayanıklı İşlevler Sürüm oluşturma belgelerini denetleyin. Mevcut orkestrasyon örneklerindeki kopmalar, orkestrasyonların takılı kalmasına neden olabilir.
Düzenlemenin tamamlanması beklenenden uzun sürüyor
Yoğun veri işleme, iç hatalar ve yetersiz işlem kaynakları düzenleme işlemlerinin normalden daha yavaş çalışmasına neden olabilir. Tamamlanması beklenenden uzun sürecek düzenleme sorunlarını gidermek için şu adımları izleyin:
Etkilenen orkestrasyon örneği kimliğine yönelik uyarılar veya hatalar için Dayanıklı Görev Çerçevesi izlemelerini denetleyin. Örneğinizle ilgili hataları aramak için Application Insights'taki Hataları ve uyarıları izleme sorgusunu kullanın.
Uygulamanız .NET işlem içi modelini kullanıyorsa extended sessions etkinleştirmeyi göz önünde bulundurun. Genişletilmiş oturumlar, işlemeyi yavaşlatabilecek geçmiş yüklemelerini en aza indirir.
Performans ve ölçeklenebilirlik sorunlarını denetleyin. Yüksek CPU kullanımı veya büyük bellek tüketimi gecikmelere neden olabilir. Ayrıntılı yönergeler için bkz. Performans ve ölçeklenebilirlik Duraklı İşlevler başlığında.
Dayanıklı İşlevler tanılaması için örnek KQL sorguları
Azure İşlevleri uygulamanız için yapılandırılan Azure Uygulaması Insights örneğine özel KQL sorguları yazarak sorunları giderin. Bu sorgularda kullanılan sütun tanımları için sütun başvurusuna bakın.
Azure Depolama mesajlaşması
Varsayılan Azure Depolama sağlayıcısını kullandığınızda, tüm Dayanıklı İşlevler davranışı Azure Depolama kuyruk iletileri tarafından yönlendirilir ve düzenlemeyle ilgili tüm durum tablo depolama ve blob depolama alanında depolanır. Dayanıklı Görev Çerçevesi izlemeyi etkinleştirdiğinizde, tüm Azure Depolama etkileşimler Application Insights'a kaydedilir. Bu veriler, yürütme ve performans sorunlarının hatalarını ayıklamak için kritik öneme sahiptir.
Dayanıklı İşlevler uzantısının v2.3.0'ında başlayarak, host.json dosyasındaki günlük yapılandırmanızı güncelleştirerek bu Dayanıklı Görev Çerçevesi günlüklerini Application Insights örneğinizde yayımlayabilirsiniz. Daha fazla bilgi için Durable Task Framework günlüğü makalesine bakın.
Aşağıdaki sorgu, belirli bir düzenleme örneğinin uçtan uca Azure Depolama etkileşimlerini inceler. zaman aralığına ve örnek kimliğine göre filtrelemek için start ve orchestrationInstanceID öğesini düzenle.
let start = datetime(XXXX-XX-XXTXX:XX:XX); // edit this
let orchestrationInstanceID = "XXXXXXX"; //edit this
traces
| where timestamp > start and timestamp < start + 1h
| where customDimensions.Category == "DurableTask.AzureStorage"
| extend taskName = customDimensions["EventName"]
| extend eventType = customDimensions["prop__EventType"]
| extend extendedSession = customDimensions["prop__IsExtendedSession"]
| extend account = customDimensions["prop__Account"]
| extend details = customDimensions["prop__Details"]
| extend instanceId = customDimensions["prop__InstanceId"]
| extend messageId = customDimensions["prop__MessageId"]
| extend executionId = customDimensions["prop__ExecutionId"]
| extend age = customDimensions["prop__Age"]
| extend latencyMs = customDimensions["prop__LatencyMs"]
| extend dequeueCount = customDimensions["prop__DequeueCount"]
| extend partitionId = customDimensions["prop__PartitionId"]
| extend eventCount = customDimensions["prop__TotalEventCount"]
| extend taskHub = customDimensions["prop__TaskHub"]
| extend pid = customDimensions["ProcessId"]
| extend appName = cloud_RoleName
| extend newEvents = customDimensions["prop__NewEvents"]
| where instanceId == orchestrationInstanceID
| sort by timestamp asc
| project timestamp, appName, severityLevel, pid, taskName, eventType, message, details, messageId, partitionId, instanceId, executionId, age, latencyMs, dequeueCount, eventCount, newEvents, taskHub, account, extendedSession, sdkVersion
Hataları ve uyarıları izleme
Aşağıdaki sorgu, belirli bir düzenleme örneği için hataları ve uyarıları arar. için orchestrationInstanceIDbir değer sağlayın.
let orchestrationInstanceID = "XXXXXX"; // edit this
let start = datetime(XXXX-XX-XXTXX:XX:XX);
traces
| where timestamp > start and timestamp < start + 1h
| extend instanceId = iif(isnull(customDimensions["prop__InstanceId"] ) , customDimensions["prop__instanceId"], customDimensions["prop__InstanceId"] )
| extend logLevel = customDimensions["LogLevel"]
| extend functionName = customDimensions["prop__functionName"]
| extend status = customDimensions["prop__status"]
| extend details = customDimensions["prop__Details"]
| extend reason = customDimensions["prop__reason"]
| where severityLevel >= 1 // to see all logs of severity level "Information" or greater.
| where instanceId == orchestrationInstanceID
| sort by timestamp asc
Kuyruk ve bölüm kimliği günlüklerini denetleme
Aşağıdaki sorgu, bir instanceId'nin denetim kuyruğuyla ilişkili tüm etkinlikleri arar. içinde orchestrationInstanceID instanceID değerini ve içinde sorgunun başlangıç saatini startbelirtin.
let orchestrationInstanceID = "XXXXXX"; // edit this
let start = datetime(XXXX-XX-XXTXX:XX:XX); // edit this
traces // determine control queue for this orchestrator
| where timestamp > start and timestamp < start + 1h
| extend instanceId = customDimensions["prop__TargetInstanceId"]
| extend partitionId = tostring(customDimensions["prop__PartitionId"])
| where partitionId contains "control"
| where instanceId == orchestrationInstanceID
| join kind = rightsemi(
traces
| where timestamp > start and timestamp < start + 1h
| where customDimensions.Category == "DurableTask.AzureStorage"
| extend taskName = customDimensions["EventName"]
| extend eventType = customDimensions["prop__EventType"]
| extend extendedSession = customDimensions["prop__IsExtendedSession"]
| extend account = customDimensions["prop__Account"]
| extend details = customDimensions["prop__Details"]
| extend instanceId = customDimensions["prop__InstanceId"]
| extend messageId = customDimensions["prop__MessageId"]
| extend executionId = customDimensions["prop__ExecutionId"]
| extend age = customDimensions["prop__Age"]
| extend latencyMs = customDimensions["prop__LatencyMs"]
| extend dequeueCount = customDimensions["prop__DequeueCount"]
| extend partitionId = tostring(customDimensions["prop__PartitionId"])
| extend eventCount = customDimensions["prop__TotalEventCount"]
| extend taskHub = customDimensions["prop__TaskHub"]
| extend pid = customDimensions["ProcessId"]
| extend appName = cloud_RoleName
| extend newEvents = customDimensions["prop__NewEvents"]
) on partitionId
| sort by timestamp asc
| project timestamp, appName, severityLevel, pid, taskName, eventType, message, details, messageId, partitionId, instanceId, executionId, age, latencyMs, dequeueCount, eventCount, newEvents, taskHub, account, extendedSession, sdkVersion
Dayanıklı İşlevler sorguları için Application Insights sütun başvurusu
Aşağıdaki tabloda, önceki sorgularla yansıtılan sütunlar ve açıklamaları listelenmiştir.
| Column | Description |
|---|---|
| PID | İşlev uygulaması örneğinin işlem kimliği. Bu değer, düzenleme çalışırken işlemin geri dönüştürülip geri dönüştürülmediğini denetlemek için kullanışlıdır. |
| taskName | Günlüğe kaydedilen olayın adı. |
| eventType | Genellikle bir düzenleyici tarafından yapılan işi temsil eden ileti türü. Olası değerlerin ve açıklamalarının tam listesi için bkz. EventType.cs. |
| uzatılmış oturum | Genişletilmiş oturumların etkinleştirilip etkinleştirilmediğini gösteren Boole değeri. |
| account | Uygulama tarafından kullanılan depolama hesabı. |
| details | Varsa, belirli bir olay hakkında ek bilgiler. |
| instanceId | Belirli bir düzenleme veya varlık örneğinin kimliği. |
| mesajKimliği | Belirli bir kuyruk iletisi için benzersiz Azure Depolama kimliği. Bu değer en yaygın olarak ReceivedMessage, ProcessingMessage ve DeletingMessage izleme olaylarında görünür. İleti kimliği Azure Depolama after tarafından oluşturulduğundan, bu değer SendMessage olaylarında mevcut değildir. |
| uygulamaKimliği | Her continue-as-new çağrıldığında değişen düzenleyici yürütmenin ID'si. |
| yaş | İletinin sıraya alınmasından bu yana geçen milisaniye sayısı. Büyük sayılar genellikle performans sorunlarını gösterir. Süreölçerin süresine bağlı olarak büyük bir Yaş değerine sahip olabilecek TimerFired ileti türü özel durumdur. |
| latencyMs | Bazı depolama işlemleri tarafından alınan milisaniye sayısı. |
| dequeueCount | İletinin kaç kez sıralandığı. Normal koşullarda bu değer her zaman 1'dir. Birden fazlaysa bir sorun olabilir. |
| partitionId | Bu günlükle ilişkili kuyruğun adı. |
| toplamEtkinlikSayısı | Geçerli eylemde yer alan geçmiş olaylarının sayısı. |
| taskHub | Görev hub'ınızın adı. |
| yeniEtkinlikler | Depolamadaki Geçmiş tablosuna yazılan geçmiş olaylarının virgülle ayrılmış listesi. |
Tüketim planındaki bağlantı yönetimi sorunları
Azure İşlevleri Tüketim planında çalışan uygulamalar bağlantı sınırlarına tabidir. Yaygın belirtiler şunlardır:
- Etkinlik işlevlerini veya dış hizmetleri çağırırken aralıklı bağlantı hataları.
- Yük altında zaman zaman başarısız olan orkestrasyonlar.
- Günlüklerdeki yuva tükenme hataları.
Bağlantı kullanımını azaltmak için, her işlev çağrısında yeni HttpClientFactory örnekler oluşturmak yerine HttpClient veya paylaşılan statik istemcileri kullanın. Bağlantı havuzu oluşturma ve en iyi yöntemler hakkında ayrıntılı yönergeler için bkz. Azure İşlevleri'da bağlantıları yönetme.
Genel ipuçları
Tip
Belirli sorun giderme adımlarına geçmeden önce uygulamanızın en son Dayanıklı İşlevler uzantı sürümünü kullandığından emin olun. Çoğu zaman, en son sürümün kullanılması, diğer kullanıcılar tarafından önceden bildirilen bilinen sorunları azaltır. Yükseltme yönergeleri için bkz. Dayanıklı İşlevler uzantı sürümünü yükseltme.
Azure portalındaki Diagnose and solve problems sekmesi uygulamanızla ilgili sorunları izlemenize ve tanılamanıza ve olası çözümler önermenize yardımcı olabilir. Daha fazla bilgi için bkz. Azure İşlev uygulaması tanılama.
Dayanıklı İşlevler sorunları için destek alın
Bu kılavuzu kullanarak sorununuzu çözemiyorsanız, Azure portalındaki işlev uygulaması sayfanızın Support + sorun giderme bölümündeki Yeni Destek isteği dikey penceresini açarak destek bileti oluşturabilirsiniz.
Sorular ve topluluk desteği için aşağıdaki GitHub depolarından birinde bir sorun açın. Bir hata bildirdiğinizde, araştırmayı hızlandırmak için etkilenen örnek kimlikleri, sorunu gösteren UTC'deki zaman aralıkları, uygulama adı (mümkünse) ve dağıtım bölgesi gibi bilgileri ekleyin.