IIS Worker Şişmesi

702 views
Skip to first unread message

Fikret AKIN

unread,
Mar 5, 2013, 5:59:30 AM3/5/13
to altdotne...@googlegroups.com
Merhaba Arkadaşlar,
Son 1-2 gündür projemiz de yavaşlık söz konusu,
Projedeki tüm gereksiz session ve sonsuz döngüye girecek tüm kodlar optimize edildi,
ancak gelelim ki halen bazen bu sıkıntı oluyor ve şişmeden dolayı diğer siteye girilmiyor.
ek e ekran görüntüsü koydum. sizin fikirlerinizi ve önerilerinizi bekliyorum.

--

 

İyi Çalışmalar,

 

Fikret AKIN

VENGASOFT – Proje Müdürü

 

Tel: 0212 327 13 18

GSM: 0534 700 75 19

Personal web: www.fikretakin.com

Company web: www.vengasoft.com

Adsız.png

Pamir Erdem

unread,
Mar 5, 2013, 6:14:51 AM3/5/13
to altdotne...@googlegroups.com

Debugdiag ya da taskmgr ile dump al windbgde sosexle bak

--
You received this message because you are subscribed to the Google Groups "altdotnetturkiye" group.
To unsubscribe from this group and stop receiving emails from it, send an email to altdotnetturki...@googlegroups.com.
To post to this group, send email to altdotne...@googlegroups.com.
Visit this group at http://groups.google.com/group/altdotnetturkiye?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

maximreality

unread,
Mar 5, 2013, 6:23:20 AM3/5/13
to altdotne...@googlegroups.com

Yazdıklarından algıladığım kadarıyla problemin karakteristiği yüzünden bottleneck görünüyor. Query’ lerini elden geçirmeni tavsiye ediyorum.

--

Sidar Ok

unread,
Mar 5, 2013, 6:58:07 AM3/5/13
to altdotne...@googlegroups.com
Pamir'in dedigini yapmak haric her$ey loto oynamak olur.


2013/3/5 maximreality <mrea...@gmail.com>

Mehmet Kut

unread,
Mar 5, 2013, 7:00:40 AM3/5/13
to altdotne...@googlegroups.com
çokça string i + ile birleştirdiyseniz ram i çok kolay şişirebilirsiniz.
kontrol edin.


2013/3/5 maximreality <mrea...@gmail.com>

Emre Mert Asyalıoğlu

unread,
Mar 5, 2013, 10:08:40 AM3/5/13
to Alt.Net Türkiye Google Group
Merhaba,

Ram şişmesi derken? Ben önbellek ile 1.5gb lar
seviyesindeyim(w3wp.exe). Çok fazla recursive işlemim var bu bakımdan
çoğunu ramde bitiriyorum. Uygulama ayağa kalkarken evet yavaş ama
sonrasında ne yavaşlama nede çakılma durumu var. Burada bahsettiğimiz
ram' in şişmesi oranı nedir ? Eğer ram uygulama ayağa kalktığı andan
sonrasında artmaya devam ediyorsa optimize edilmesi gereken bir şeyler
daha var sanki. Cache gibi birşeyler kullanıyormusunuz bilmiyorum ama
iptal edip birde öyle dener misiniz ? Bazen yeni cache datasını
eskisini güncellemeden o halen oradayken direk insert yaparak ekleyip
hafızayı şişirebiliyoruz. :)

Kolay gelsin.

5 Mart 2013 14:00 tarihinde Mehmet Kut <mehm...@gmail.com> yazdı:
> çokça string i + ile birleştirdiyseniz ram i çok kolay şişirebilirsiniz.
> kontrol edin.
>
>
> 2013/3/5 maximreality <mrea...@gmail.com>
>>
>> Yazdıklarından algıladığım kadarıyla problemin karakteristiği yüzünden
>> bottleneck görünüyor. Query' lerini elden geçirmeni tavsiye ediyorum.
>>
>> From: altdotne...@googlegroups.com
>> [mailto:altdotne...@googlegroups.com] On Behalf Of Fikret AKIN
>> Sent: Tuesday, March 5, 2013 1:00 PM
>> To: altdotne...@googlegroups.com
>> Subject: [altdotnetturkiye] IIS Worker Şişmesi
>>
>>
>>
>> Merhaba Arkadaşlar,
>>
>> Son 1-2 gündür projemiz de yavaşlık söz konusu,
>>
>> Projedeki tüm gereksiz session ve sonsuz döngüye girecek tüm kodlar
>> optimize edildi,
>>
>> ancak gelelim ki halen bazen bu sıkıntı oluyor ve şişmeden dolayı diğer
>> siteye girilmiyor.
>>
>> ek e ekran görüntüsü koydum. sizin fikirlerinizi ve önerilerinizi
>> bekliyorum.
>>
>>
>> --
>>
>>
>>
>> İyi Çalışmalar,
>>
>>
>>
>> Fikret AKIN
>>
>> VENGASOFT - Proje Müdürü
Emre Mert Asyalıoğlu

Gokhan Demir

unread,
Mar 6, 2013, 3:55:55 AM3/6/13
to altdotne...@googlegroups.com
Problemi buluncaya kadar "diğer siteyi" farklı bir application pool'a alıp izole edebilirsin. 


2013/3/5 Emre Mert Asyalıoğlu <easya...@gmail.com>



--
Gokhan Demir.

ersan bilik

unread,
Mar 6, 2013, 3:57:28 AM3/6/13
to altdotne...@googlegroups.com
Memory leak olabilir. Uygulama içinde kullanılan instance içindeki statik değişkenleri kontrol etmekte fayda var.


2013/3/6 Gokhan Demir <yada...@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:01:51 AM3/6/13
to altdotne...@googlegroups.com
Teşekkürler arkadaşlar, sorun linq da .take() kullandığımız yerlerde takılıp kalmasından kaynaklanmış.
Başka yapı yaparak sorunu şimdilik çözdük son 5 saat tir herhangi bir sıkıntı olmadı.

6 Mart 2013 10:57 tarihinde ersan bilik <ersan...@gmail.com> yazdı:



--

 

İyi Çalışmalar,

 

Fikret AKIN

VENGASOFT – Proje Müdürü

Berke Sokhan

unread,
Mar 6, 2013, 4:05:30 AM3/6/13
to altdotne...@googlegroups.com
Linq'in provider'ı nedir merak ettim?

6 Mart 2013 11:01 tarihinde Fikret AKIN <yazilimci....@gmail.com> yazdı:



--
Berke SOKHAN.

http://twitter.com/berkesokhan
http://blog.berkesokhan.com

Eralp Erat

unread,
Mar 6, 2013, 4:13:02 AM3/6/13
to altdotne...@googlegroups.com
Selam , 

Take() mi ? Neden ki ? sizin extension metodunuz olan başka bir take() mi yoksa mevcut olan mı ? 

Bana oldukca garip geldi....

2013/3/6 Fikret AKIN <yazilimci....@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:23:36 AM3/6/13
to altdotne...@googlegroups.com
Berke Hocam; klasik entity freamwork kullandık kendi bussines class ımızı kullanarak erişiyoruz.
 
Eralp hocam,

Ilceler ilce = Ilceler.GetIlcelerByID(otel.IlceID.Value);

using (var otelEntity = new OtelEntities())

{

var list = (from i in otelEntity.Ilceler

//join o in otelEntity.Oteller on i.ID equals otel.IlceID into _oi

//from io in _oi.DefaultIfEmpty()

where i.SehirID == ilce.SehirID

select new

{

IlceID = i.ID,

IlceAdi = i.IlceAdi,

//OtelSayisi = i.Oteller.Count

//YorumSayisi = iotel.UyeYorumlariOtel.Count

}).ToList();

var list2 = list.OrderBy(x => Guid.NewGuid()).Take(5).ToList();

//for (int i = 0; i < 5; i++)

//{

// if (list2.FindAll(x => x.IlceID == list2[i].IlceID).Count > 1)

// {

// list2.Remove(list2[i]);

// list2.Add(list.OrderBy(x => Guid.NewGuid()).Take(1).FirstOrDefault());

// i--;

// }

//}

if (list2.Count > 0)

{

rptBolgeDigerAltBolgeler.DataSource = list2;

rptBolgeDigerAltBolgeler.DataBind();

}

}


yukarıdaki kodda kapattığımız yerlerde sıkıntı vardı onları kapatarak ilgili repeater in item data bound olayında gerekli işlemleri yaptık. böylece sonsuz dönüye girmedi.
6 Mart 2013 11:13 tarihinde Eralp Erat <eralp...@gmail.com> yazdı:

Ömer Çelik

unread,
Mar 6, 2013, 4:31:50 AM3/6/13
to altdotne...@googlegroups.com

var list = (from i in otelEntity.Ilceler

//join o in otelEntity.Oteller on i.ID equals otel.IlceID into _oi

//from io in _oi.DefaultIfEmpty()

where i.SehirID == ilce.SehirID

select new

{

IlceID = i.ID,

IlceAdi = i.IlceAdi,

//OtelSayisi = i.Oteller.Count

//YorumSayisi = iotel.UyeYorumlariOtel.Count

}).ToList(); // burda dbdeki tüm kayıtları çekiyorsun. bunu kaldırırsan sorunun çözülür.

var list2 = list.OrderBy(x => Guid.NewGuid()).Take(5).ToList(); //artık burası, listedeki tüm kayıtlardan 5 tanesini alıyor.


Ömer Çelik


2013/3/6 Fikret AKIN <yazilimci....@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:36:15 AM3/6/13
to altdotne...@googlegroups.com
Sağolun Ömer hocam ancak onu da denedik ama gene aynı durum idi.

6 Mart 2013 11:31 tarihinde Ömer Çelik <omer...@gmail.com> yazdı:

ersan bilik

unread,
Mar 6, 2013, 4:41:15 AM3/6/13
to altdotne...@googlegroups.com
Anladığım kadarı ile "her şehire ait en az 5 ilçe vardır" varsayımı yapılmış - doğru mudur ?


2013/3/6 Fikret AKIN <yazilimci....@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:46:57 AM3/6/13
to altdotne...@googlegroups.com
doğrudur ersan hocam, biz orada otelin bulunduğu sehirdeki 5 ilçeyi getiriyoruz.

6 Mart 2013 11:41 tarihinde ersan bilik <ersan...@gmail.com> yazdı:

Ömer Çelik

unread,
Mar 6, 2013, 4:50:01 AM3/6/13
to altdotne...@googlegroups.com
Şimdi dikkat ettim bende, iller ilçeler listesi zaten büyük değildir muhtemelen. Count çektiğin şeyler muhtemelen bu yavaşlamaya sebep oluyor. Mümkünse count işlemini canlı arayüzlerde doğrudan kullanma. Belli sürelerde count edilmiş olarak saklasan daha kolay erişirsin.

Emre Aydemir

unread,
Mar 6, 2013, 6:12:52 AM3/6/13
to altdotne...@googlegroups.com

var list2 = list.OrderBy(x => Guid.NewGuid()).Take(5).ToList();

 

 

yukarıdaki order by hiç bir şey orderlamıyor gibi geldi bana.

ersan bilik

unread,
Mar 6, 2013, 6:17:58 AM3/6/13
to altdotne...@googlegroups.com
Bu shuffle yapmak için kullanılıyor - performans workaround u


2013/3/6 Emre Aydemir <emra...@gmail.com>

Arda Çetinkaya

unread,
Mar 6, 2013, 8:04:11 AM3/6/13
to altdotne...@googlegroups.com
Sorun çözülmüş sanırım gerçi comment'lenerek... Veritabanını bilmeden,
çok entity framework tarafından kaynaklanıyordur diyemiyeceğim ama
dikkatimi çeken, comment'lenen kodun ne yaptığı...yani runtime'da
veriyapısı nasıl oluyor nasıl çalışıyor tam bilemiyorum ama; 5 kere
çalışacak bir iterasyon yapısının içerideki if kontrolü ile daha fazla
çalışabilecek ve hatta dikkat edilmezse uzun bile sürecek bir yapısı
olması... i-- olayının neden yapıldığını ya da ihtiyaç doğrultusunda
daha iyi nasıl bir kod yazılabileceği düşünülebilir gibi...

//for (int i = 0; i < 5; i++)

//{

// if (list2.FindAll(x => x.IlceID == list2[i].IlceID).Count > 1)

// {

// list2.Remove(list2[i]);

// list2.Add(list.OrderBy(x => Guid.NewGuid()).Take(1).FirstOrDefault());

// i--;

// }

//}

2013/3/6 ersan bilik <ersan...@gmail.com>:

Eralp Erat

unread,
Mar 6, 2013, 9:05:19 AM3/6/13
to altdotne...@googlegroups.com
Take'in performans konusunda sıkıntı oluşturmasına malesef bir cevap değil bu.

Benim bu noktada ki önerim (performans sıkıntısının analizi için...) mümkünse bir SP yapip ( join vs..) EF içinden de bu SP'yi import function yapip bir complex type'a retrieve etmeniz.Hem execution time'in kontrol altına alınması sağlanmış olur hemde içerideki FindAll vs gibi memory consumption ağırlıklı işlemlerde kısmen elimine olur.

Yok ben SP'ye girmeyip birebir statement ve app code ile veriyi filtreleyeceğim diyorsanız il ve ilçe gibi datalar sık değişmediği için bunları cache'e atmanızı ( cok kucuk olacaktır toplamda.. ( il ilçe mahalle üçlüsü ile çokca boğusmusluğumuz oldu...)) ve ordaki datayi bir kez fill edip sonrasında bu datalardan işlem yapmanızı öneririm.

Ama performans söz konusu olan noktalarda ve join ağırlıklı işlemlerde sürekli db ye dynamic sql göndermek yerine execution plan time'i dengelenmiş ( precompiled olmasından mütevellit) bir sp calling çözüm için kaçınılmaz olabiliyor..Intellitrace i açıp ADO.NET i filtrelemenizi ve vuwwwww dedirtecek kadar statementin havada uçuştuğunu görmek paha biçilemez..


2013/3/6 Arda Çetinkaya <ardace...@gmail.com>

Hakan Taşpınar

unread,
Mar 6, 2013, 9:34:06 AM3/6/13
to altdotne...@googlegroups.com
IIS 'in log dosyasını log parser ile bakıp hangi sayfa da Request Wait Time,Request Execution Time,Request Queued kriterlerini göre vede yüksek olan değere göre order by yapıp kesin sıkıntıyı görmenizi öneririm. Veritabanı yönetici varsa eğer yoksa sizin sql i monitoring etmeniz gerekebilir.Sql den kaynaklıysa mutlaka CPU tavan yapmıştır.

EF deki linq sorgusunda endişe duyuyorsan prototip hazırlayıp stage ortamında test edebilirsin.

6 Mart 2013 16:05 tarihinde Eralp Erat <eralp...@gmail.com> yazdı:

Reşad Askeroğlu

unread,
Mar 6, 2013, 11:16:11 AM3/6/13
to altdotne...@googlegroups.com
yardımcı olmak için belki aşağıdaki durum belki yardımcı olabilir.

group/distinct olmadığı için listede 5 aynı kayıt olma durumunda = infinity loop.
  

2013/3/6 Hakan Taşpınar <hknt...@gmail.com>

Pamir Erdem

unread,
Mar 6, 2013, 12:13:21 PM3/6/13
to altdotne...@googlegroups.com
neden dump alıp incelemek dışında işlem yapmaya çalışıyorsunuz ?


2013/3/6 Hakan Taşpınar <hknt...@gmail.com>



--
Pamir Erdem

Eralp Erat

unread,
Mar 6, 2013, 12:24:02 PM3/6/13
to altdotne...@googlegroups.com
Bilmiyor olabilir , sanırım ondan.

http://support.microsoft.com/kb/919790

linkinde konu step by step açıklanmış.


2013/3/6 Pamir Erdem <pamir...@gmail.com>

Eralp Erat

unread,
Mar 6, 2013, 12:27:18 PM3/6/13
to altdotne...@googlegroups.com

Fikret AKIN

unread,
Mar 6, 2013, 12:29:48 PM3/6/13
to altdotne...@googlegroups.com
Eralp hocam teşekkürler,
Pamir hocam dump dosyasını aldım ama açıkçası bakmaya çalıştığımda ntdll hatası verdi, şimdilik proje düzgün çalışıyor ama gene olursa ilk işim sizin dediğiniz gibi yapmak olacak.

6 Mart 2013 19:27 tarihinde Eralp Erat <eralp...@gmail.com> yazdı:



--

 

İyi Çalışmalar,

 

Fikret AKIN

VENGASOFT – Proje Müdürü

Pamir Erdem

unread,
Mar 6, 2013, 1:49:50 PM3/6/13
to altdotne...@googlegroups.com
http://blogs.msdn.com/b/tess/ burdan öğrenebilirsiniz en düzgün


2013/3/6 Fikret AKIN <yazilimci....@gmail.com>



--
Pamir Erdem

Sidar Ok

unread,
Mar 6, 2013, 2:21:27 PM3/6/13
to altdotne...@googlegroups.com
He yaw bu kadin efsane. Ama uzun zamandir o konu uzerine yazmiyor sanirim.


2013/3/6 Pamir Erdem <pamir...@gmail.com>



--

Berke Sokhan

unread,
Mar 6, 2013, 2:39:13 PM3/6/13
to altdotne...@googlegroups.com
Hatun XNA ci olmuş gibi. 

Tr de IIS için MS support Mrs.Ferrandes'e eskale ediyordu dumpları zamanında (2009).



6 Mart 2013 21:21 tarihinde Sidar Ok <sid...@gmail.com> yazdı:



--

Eralp Erat

unread,
Mar 6, 2013, 3:32:35 PM3/6/13
to altdotne...@googlegroups.com
bu ablayı göreli bir 4-5 yıl kadar oldu sanırım. şaşırmıştım...axe etkisi kaçınılmaz sanırım.aynı.

2013/3/6 Berke Sokhan <berke...@gmail.com>

Reşad Askeroğlu

unread,
Mar 6, 2013, 3:57:51 PM3/6/13
to altdotne...@googlegroups.com
koddan gözüktüğü kadarıyla 5 elemanlı listenin elemanları hepsi aynı (ilçeler) olduğu durumda  infinity loop'a girer. 

bunun için dump'ı incelemeye gerek varmı?
unmanaged code olduğu durumda dump'ı incelemek çok yararlı olurdu.
çok basit bir işlem için bu kadar dump incelemek zaman öldürmekten başka bir şey değil.

(dumpı kurup çalıştırmak ve oluşan rapordan bir şey çıkarmak kendisi başlı başına işgence :-))
 

2013/3/6 Eralp Erat <eralp...@gmail.com>

Sidar Ok

unread,
Mar 6, 2013, 4:38:37 PM3/6/13
to altdotne...@googlegroups.com
Sorun cozuldukten ve nerden oldugu anla$ildiktan sonra bu yorumu yapiyoruz.

Peki sorunun kodun orasinda oldugunu nasil anladik?


2013/3/6 Reşad Askeroğlu <r.ask...@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:42:22 PM3/6/13
to altdotne...@googlegroups.com
saçma gelebilir ama her işlemden sonra kayıt yazdık ve nerede çok fazla sürdüğünü ve cevap vermediğini bulduk, sonrada dikkatli debug ederek sorunun orada olduğuna karar verdik.

6 Mart 2013 23:38 tarihinde Sidar Ok <sid...@gmail.com> yazdı:

Tuna Toksoz

unread,
Mar 6, 2013, 4:43:02 PM3/6/13
to altdotne...@googlegroups.com
memory profiler kullansaydiniz 100 requestte sorun cikardi ortaya

Tuna Toksöz
Eternal sunshine of the open source mind.


2013/3/6 Fikret AKIN <yazilimci....@gmail.com>

Fikret AKIN

unread,
Mar 6, 2013, 4:48:08 PM3/6/13
to altdotne...@googlegroups.com
En başta düşünmediğimiz için yapılmadı, proje termin süresi 4+1 ay ama şuan 8 ay devrildi, proje müdürleri de biliyor neden bu kadar geciktiğini o yüzden en başta plansız gidilince çıkan sonuç bu oldu.
Neyse ki proje bitecek açılınca sizlerle de paylaşırım.
6 Mart 2013 23:43 tarihinde Tuna Toksoz <teh...@gmail.com> yazdı:

Sidar Ok

unread,
Mar 6, 2013, 4:49:38 PM3/6/13
to altdotne...@googlegroups.com
I$te bunu yapmamak icin / ya da yapamadigimiz durumlarda profiler kullaniyoruz.

Bu duruma ise profiler imizi kendimiz yazmak diyoruz :)


2013/3/6 Fikret AKIN <yazilimci....@gmail.com>

Sidar Ok

unread,
Mar 6, 2013, 5:07:02 PM3/6/13
to altdotne...@googlegroups.com
Her zaman profiler da cali$tiramiyorsun. Profiler process e attach oluyor ve yava$latiyor. Ayrica bazi problemler sadece runtime da olu$uyor, bazi problemler sadece belli durumlarda ve tekrarlanamaz oluyor.

Bazi i$ler kritik onemde oluyor.

Ha deneme yanilma ile, 82 yere Log.Write koyarak da yapilmaz mi? her durumda olmasa da bircok basit durumda yapilir, burda oldugu gibi.


2013/3/6 Sidar Ok <sid...@gmail.com>
Reply all
Reply to author
Forward
0 new messages