2014-08-29 35 views
5

dağıtıldıktan sonra AppDomains'i boşaltmıyor Web uygulamanızı dağıtırken, tüm kodu yeni bir dizine kopyalayıp iis'i bu yeni dizine yönlendiririz. Bunu yaptığımızda, uygulama alanlarının sayısı artar, ancak asla azalmaz. Ayrıca, Application_End etkinliğimiz hiç ateş etmiyor.ASP.NET Web uygulaması,

Bilinmeyen bir süre boyunca, her iki Uygulama Alanı grubu yine de perfmon tarafından raporlanırken, sistem çok zayıf bir performans gösterirken GC% s'de% 100'e ulaşır. Sonunda sorunsuz bir şekilde çalışan uygulamayı almak için uygulama havuzunu geri dönüştürüyorum.

Ek bilgi parçacığı: appdomains listeleme listeleme 2 benim dev makinede 2 gösterir, ancak canlı sunucuda 4 çalıştırın ... biz sadece havuzda çalışan bir uygulama var bu yüzden kullandığımız bazı kütüphane yaratıyor demektir uygulama alanları.

Olanları ayıklamaya çalışmak için ne yapmalıyım? Bir uygulama alan adının boşalmasını ne engeller? Biraz daha detay sorunun benziyor günlük bilgileri aldıktan sonra

Güncelleme 9/3/2014

etrafında kalmıyorum eski uygulama alanları, bu yeniden başlatma sırasında oluşturulan yeni uygulama etki bu. Yeni bir örnek başlatan uygulama yerine, iki başlar. Bazen, eski örnekden application_end alırız, bazen yapmayız.

Güncelleme 9/4/2014

Hem şeyler oluyor. Süreç Gezgini'ni Kullanma Makinelerin birinde eski uygulama etki alanının hala var olduğunu ve yeni bir işlemin başladığını görebiliyorum. Diğer makinede sadece 2 uygulama alanı vardı ancak sıralı kimlikleri arasında bir boşluk vardı. Bu yüzden iki örnek başladı (uygulama başlatan bir günlük mesajı aldık), bunlardan biri neredeyse anında öldü ve 2 uygulama alanı kaldı. Eğer kontrol edebilir gidermeye yardımcı olacak

+0

ASP.NET'i önbelleğe alma süresi dolduğunda önbelleği yeniden yükleyen bir tahliyeyle kullanma olasılığınız var mı? –

+0

ASP.NET uygulama önbelleğini kullanıyoruz. Kullanıcıların oturum zaman aşımına dayalı olarak son kullanma tarihi geçmiş bir şeyler ekliyoruz. Yine de kendi başına bir şey yüklemez. –

+0

"Son kullanma tarihi" ne demek istiyorsun? Son kullanma tarihini güncellediğiniz anlamına mı geliyor? Önceden sorduğum şey, önbellek yöneticisinin –

cevap

2

SADECE uygulamanın appdomains boşaltma değil neden olduğundan emin olmamasına rağmen, kesinlikle bir neden. Asıl cevap, anlamaya çalıştığım adımlardan daha az ilgi çekicidir.

  1. Uygulamamızla ilgili 10 iş parçacığındaki 100'lerce istekte bulunmak için biraz ruby ​​komut dosyası yazdım (jmeter'ın ayarlanması bundan daha fazla zaman alacaktır).
  2. Komut dosyasını çalıştırın ve çalıştırırken uygulama yapılandırma dosyasında değişiklikler yapın. Bu birkaç dakika sürdü.
  3. İşlemin içinde hala yüklü 4 uygulama etki alanı olduğunu doğrulamak için süreç gezgini kullandım.
  4. Procdump koştum ve bir döküm dosyası oluşturdum. iplik denilen yerde
  5. Debugger kod satırında durdu (böcek yönetilen kod ya da değil oldu hiçbir fikrim yoktu bile)
  6. görsel stüdyoya ProcDump dosyasını Loaded ve "Yalnızca Yönetilen ile hata ayıklama" tıklandığında Application_End işlemeyi bitirmek için bir kuyruk bekliyordu. Değişkenlerin değerlerine bakarak, kuyruğun artık öğeleri işlemeye devam etmediğini anlayabildim, ancak kuyruk boşalana kadar bekleyecektik.
  7. Kodu değiştirip tekrar işlemeye başla, bu sefer web yapılandırmasında yaptığım değişikliklerle başlatılan tüm uygulama alanları kaldırıldı.
2

bir şey var:

Process Explorer aslında bir işlem tarafından yüklenen tüm uygulama etki listeleyen bir .NET Assemblies sekmesi vardır. Not: sekme yalnızca .NET Framework kullanan işlemler için görünür.

+0

Teşekkürler, çünkü uygulama örneklerinin listelenmesi için çalışılan kod, canlı örnek süreç kaşifinde bazı garip nedenlerden dolayı başarısız oldu, çünkü AppDomains'i görüntülememi sağladı. Şu anda 4. SharedDomain, DefaultDomain, ve bizim uygulama gibi görünen iki örnek var. –

+0

Yalnızca uygulama alan adını neyin tuttuğunu biliyordum. –

İlgili konular