Aracılığıyla paylaş


Dayanıklı İşlevler Sorun Giderme Kılavuzu

Dayanıklı İşlevler, sıradan kod kullanarak sunucusuz düzenleme oluşturmanızı sağlayan bir Azure İşlevleri uzantısıdır. Dayanıklı İşlevler hakkında daha fazla bilgi için bkz. Dayanıklı İşlevler genel bakış.

Bu makalede, Dayanıklı İşlevler uygulamalarındaki yaygın senaryolarda sorun gidermeye yönelik bir kılavuz sağlanır.

Not

Microsoft destek mühendisleri, uygulamanızla ilgili sorunları tanılamaya yardımcı olabilir. Bu kılavuzu kullanarak sorununuzu tanılayamıyorsanız, Azure portal işlev uygulamanızın Destek + sorun giderme bölümündeki Yeni Destek isteği dikey penceresine erişerek destek bileti oluşturabilirsiniz.

Azure Portal'da destek isteği sayfasının ekran görüntüsü.

İpucu

Hata ayıklarken ve sorunları tanılarken, uygulamanızın en son Dayanıklı İşlevler uzantı sürümünü kullandığından emin olarak başlamanız önerilir. Çoğu zaman en son sürümün kullanılması, diğer kullanıcılar tarafından önceden bildirilen bilinen sorunları azaltır. Uzantı sürümünüzü yükseltme yönergeleri için lütfen Uzantı sürümünü yükseltme Dayanıklı İşlevler makalesini okuyun.

Azure portal sorunları tanılama ve çözme sekmesi, uygulamanızla ilgili olası sorunları izlemek ve tanılamak için yararlı bir kaynaktır. Ayrıca tanıya dayalı olarak sorunlarınıza olası çözümler sunar. Diğer ayrıntılar için bkz. Azure İşlevi uygulaması tanılama .

Yukarıdaki kaynaklar sorununuzu çözmediyse, aşağıdaki bölümlerde belirli uygulama belirtileri için öneriler sağlanır:

Düzenleme durumunda takıldı Pending

Düzenleme başlattığınızda Dayanıklı uzantı tarafından yönetilen bir iç kuyruğa "başlat" iletisi yazılır ve düzenlemenin durumu "Beklemede" olarak ayarlanır. Düzenleme iletisi alındıktan ve kullanılabilir bir uygulama örneği tarafından başarıyla işlendikten sonra, durum "Çalışıyor" (veya "Beklemede" olmayan başka bir duruma geçer).

"Beklemede" durumunda süresiz olarak takılan düzenleme örneklerinin sorunlarını gidermek için aşağıdaki adımları kullanın.

  • Etkilenen düzenleme örneği kimliğine yönelik uyarılar veya hatalar için Dayanıklı Görev Çerçevesi izlemelerini denetleyin. Hata İzleme/Uyarılar bölümünde örnek bir sorgu bulunabilir.

  • Takılan düzenleyiciye atanan Azure Depolama denetim kuyruklarını gözden geçirin ve "başlangıç iletisinin" hala orada olup olmadığını denetleyin Denetim kuyrukları hakkında daha fazla bilgi için Bkz. Azure Depolama sağlayıcısı denetim kuyruğu belgeleri.

  • Uygulamanızın platform yapılandırma sürümünü "64 Bit" olarak değiştirin. Bazen uygulamada bellek yetersiz olduğundan düzenleme işlemleri başlatılmaz. 64 bit işleme geçmek, uygulamanın toplam belleği daha fazla ayırmasını sağlar. Bu 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 uzun bir gecikmeden sonra başlar

Normalde, düzenleme işlemleri zamanlandıktan sonra birkaç saniye içinde başlar. Ancak, düzenlemelerin başlatılmasının daha uzun sürebileceği bazı durumlar vardır. Düzenlemelerin yürütülmesinin birkaç saniyeden uzun sürmesi sorunlarını gidermek için aşağıdaki adımları kullanın.

Düzenleme tamamlanamadı / durumunda takıldı Running

Düzenleme uzun bir süre "Çalışıyor" durumunda kalırsa, bu genellikle tamamlanması zamanlanmış uzun süre çalışan bir görevi beklediği anlamına gelir. Örneğin, dayanıklı bir zamanlayıcı görevi, bir etkinlik görevi veya bir dış olay görevinin tamamlanması beklenebilir. Ancak, zamanlanmış görevlerin başarıyla tamamlandığını ancak düzenlemenin hala ilerlemediğini gözlemlerseniz, düzenlemenin bir sonraki görevine geçmesini engelleyen bir sorun olabilir. Bu durumdaki düzenlemelerden genellikle "takılmış düzenleme" olarak söz ediyoruz.

Takılan düzenleme sorunlarını gidermek için aşağıdaki adımları kullanın:

  • İş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ına yardımcı olabilir.

  • Sürekli büyüyen kuyruklar olup olmadığını görmek için Azure Depolama hesabı denetim kuyruklarını denetleyin. Bu Azure Depolama mesajlaşma KQL sorgusu , düzenleme iletilerini sıralamayla ilgili sorunları belirlemenize yardımcı olabilir. Sorun yalnızca tek bir denetim kuyruğuna etki ediyorsa, yalnızca belirli bir uygulama örneğinde var olan bir sorunu gösterebilir ve bu durumda iyi durumda olmayan VM örneğinden çıkmak için ölçeği artırma veya azaltma yararlı olabilir.

  • Bu kuyruk adını Bölüm Kimliği olarak filtrelemek ve bu denetim kuyruğu bölümüyle ilgili sorunları aramak için Azure Depolama Mesajlaşması bölümündeki Application Insights sorgusunu kullanın.

  • Dayanıklı İşlevler En İyi Yöntem ve Tanılama Araçları'ndaki yönergeleri gözden geçirin. Bazı sorunlara bilinen Dayanıklı İşlevler anti-desenler neden olabilir.

  • Dayanıklı İşlevler Sürüm Oluşturma belgelerini gözden geçirin. Bazı sorunlar, uçuş içi düzenleme örneklerinde hataya neden olan değişikliklerden kaynaklanabilir.

Düzenleme yavaş çalışıyor

Ağır veri işleme, iç hatalar ve yetersiz işlem kaynakları düzenleme işlemlerinin normalden daha yavaş yürütülmesine neden olabilir. Yürütülmesi beklenenden uzun süren düzenleme sorunlarını gidermek için aşağıdaki adımları kullanın:

  • Etkilenen düzenleme örneği kimliğine yönelik uyarılar veya hatalar için Dayanıklı Görev Çerçevesi izlemelerini denetleyin. Hata İzleme/Uyarılar bölümünde örnek bir sorgu bulunabilir.

  • Uygulamanız .NET işlem içi modelini kullanıyorsa genişletilmiş oturumları etkinleştirmeyi göz önünde bulundurun. Genişletilmiş oturumlar geçmiş yüklemelerini en aza indirerek işlemeyi yavaşlatabilir.

  • Performans ve ölçeklenebilirlik sorunlarını denetleyin. Uygulama performansı birçok faktöre bağlıdır. Örneğin, yüksek CPU kullanımı veya büyük bellek tüketimi gecikmelere neden olabilir. Ayrıntılı yönergeler için performans ve Dayanıklı İşlevler ölçeğini okuyun.

Örnek Sorgular

Bu bölümde, Azure İşlevleri uygulamanız için yapılandırılmış Azure Uygulaması Insights örneğine özel KQL sorguları yazarak sorunları giderme adımları gösterilmektedir.

Azure Depolama mesajlaşması

Varsayılan Azure Depolama sağlayıcısı kullanılırken, 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 izleme etkinleştirildiğinde, tüm Azure Depolama etkileşimleri Application Insights'a kaydedilir ve bu veriler, hata ayıklama yürütme ve performans sorunları için kritik önem taşır.

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üklerinin Application Insights örneğinde yayımlanmasını sağlayabilirsiniz. Bunun nasıl yapılacağını öğrenmek ve yönergeler için Dayanıklı Görev Çerçevesi günlüğe kaydetme makalesine bakın.

Aşağıdaki sorgu, belirli bir düzenleme örneği için uçtan uca Azure Depolama etkileşimlerini incelemeye yöneliktir. zaman aralığına ve örnek kimliğine göre filtrelemek için ve orchestrationInstanceID öğesini düzenleyinstart.

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

İzleme Hataları/Uyarılar

Aşağıdaki sorgu, belirli bir düzenleme örneği için hataları ve uyarıları arar. için orchestrationInstanceIDbir değer sağlamanız gerekir.

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 

Denetim kuyruğu / Bölüm Kimliği günlükleri

Aşağıdaki sorgu bir instanceId'nin denetim kuyruğuyla ilişkili tüm etkinlikleri arar. içinde instanceID orchestrationInstanceID değerini ve içinde sorgunun başlangıç zamanını startsağlamanız gerekir.

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

Application Insights sütun başvurusu

Yukarıdaki sorgular tarafından öngörülen sütunların ve ilgili açıklamalarının listesi aşağıdadır.

Sütun Açıklama
Pıd İşlev uygulaması örneğinin işlem kimliği. Bu, düzenleme yürütülürken işlemin geri dönüştürülip geri dönüştürülmediğini belirlemek için yararlıdır.
Görevadı 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ğerlerinin ve açıklamalarının tam listesi buradadır
extendedSession Genişletilmiş oturumların etkinleştirilip etkinleştirilmediğini gösteren Boole değeri.
account Uygulama tarafından kullanılan depolama hesabı.
ayrıntılar Varsa, belirli bir olay hakkında ek bilgiler.
instanceId Belirli bir düzenleme veya varlık örneğinin kimliği.
Messageıd 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, biz iletiyi gönderdikten sonra Azure Depolama tarafından oluşturulduğundan SendMessage olaylarında BULUNMADIĞINI unutmayın.
Executionıd Her çağrıldığında değişen continue-as-new düzenleyici yürütme kimliği.
yaş İleti sıraya alındıktan sonra 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.
gecikme süresiM'ler Bir depolama işlemi 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.
Partitionıd Bu günlükle ilişkili kuyruğun adı.
totalEventCount Geçerli eylemde yer alan geçmiş olaylarının sayısı.
taskHub Görev hub'ınızın adı.
newEvents Depolamadaki Geçmiş tablosuna yazılan geçmiş olaylarının virgülle ayrılmış listesi.