Soru Üretim web sunucusunda aralıklı yüksek CPU (% 100)


StackOverflow'tan X-Post:

https://stackoverflow.com/questions/9465123/intermittent-high-cpu-100-on-production-webserver

Her biri 24 çekirdekli ve 24GB hafızalı 3 web sunucusuna sahip bir web kümemiz var.

Bizim uygulama son yama ASP.NET 4.0, MVC3, IIS 7.5 ile - Kendi uygulama havuzunda.

Çok aralıklı olarak, (Belki her 2/3 günde bir) web sunucularından biri istekleri sunmayı durduracak ve 24 çekirdeğin tümü% 100 CPU (bellek ve disk normal görünecek) gösterecektir.

IIS yöneticisinin tamamen donmadığı birkaç kez, aktif çalışan istekleri çok sayıda site alanı / istekleri arasında oldukça rastgele bir yayılımla, herhangi bir yararlı bilgi sunmuyor gibi görünmektedir.

Bir sunucu öldükten sonra yükü kaldırabiliyoruz - ve 5 dakika daha uzun olmayan hizmet taleplerinden sonra, CPU aktivitesi normnal'a geri dönecek - bize sonsuz bir döngü olmadığını düşündürüyor.

Çalışan işlemin bir bellek dökümü (yaklaşık 4GB boyutudur!) Yönetilen yığın izlerinin herhangi bir yerinde herhangi bir kod / ad alanımızın hiçbirini göstermez - ancak basitçe .Net istek istekleri içeriyor (WinDbg kullanabiliyorum yanlış - ve sembollerimizi doğru şekilde yüklemiyor - ancak yığın izleri herhangi bir eksik / adlandırılmamış yöntem çağrısını göstermiyor - bu yüzden oldukça kafam karıştı)

Sunucularımız normalde 1000 req / sn'yi mutlu bir şekilde işliyor, bu yüzden hepsi çok garip.

Perfmon'da fark ettiğimiz garip bir şey - Contention Rate / sn 800'e benziyordu. Uygulamamızda herhangi bir fantezi çok parçalı kodumuz yok ve sahip olduğumuz tek kilitler önbellek kodumuzda bulunuyor. çağlar değişti).

Bu konunun nasıl teşhis edileceğine dair herhangi bir tavsiye / ipucu en çok takdir edilecektir.

Şerefe.


5
2018-02-27 13:00


Menşei


Olası bir sebepten ötürü: ASP.NET uygulama havuzlarını periyodik olarak geri dönüştürür. Çok fazla talep olduğunda, bu geri dönüşüm sırasında IIS bunları sıraya koymaya başlayabilir. Uygulama havuzu geri geldiğinde çok fazla istek beklemede + yeni olanlar var, bu yüzden IIS onları birçoğunu işlemeye başladı => CPU / bellek / ihtiyaç duyduğu her şeyi yiyin. Yeterli kaynak => yavaş => daha fazla istek sıraya alındı ​​=> daha sık IIS geri dönüşüm uygulama havuzları => kartopu.
belki biraz StackOverflowException, sonsuz döngü, özyineleme
Hadi beyler, TWICE'ı yayınlama. - TomTom
Evet - Bir tür O (n ^ n) gariplik ya da bir şekilde üretime dönüşen başka bir algoritma olduğundan endişeliyiz - ama dediğim gibi, bellek döküntülerimizde, kod / ad alanlarımızı görmeyi beklersiniz. Bu yüzden, rahatsız edici yöntemin ne olabileceğini bulabiliriz. Ama sadece vanilya var. Net çağrıları - tescilli hiçbir şey. Tuhaf. - Dave


Cevaplar:


Dave Sizi başlatmak için birkaç düşünce:

Ben kaynakları yiyorsun w3wp.exe olduğunu varsayalım. Aksi halde, sunucunun genel sağlığına daha iyi bir bakış açısı elde etmek için bazı PAL raporları çalıştırmaya değer olabilir: http://pal.codeplex.com/  Bazen bir IIS problemi olsa bile PAL'yi bile çalıştıracağım… PAL, asla düşünemeyeceğiniz her türlü sorunu tespit edebilir.

Performans İzleyicisini (baştan önce ve sırasında) kontrol edin ... ASP.Net Uygulama İsteğiniz / Sürecinizin "yavaş yanıt" dönemlerinde daha yüksek olup olmadığını anlamaya çalışın ... Bunu size söylemenin en hızlı yolu olduğunu düşünüyorum. normalden daha fazla istek alıyorsanız.

Yüklemek için daha uzun süren bir (veya birkaç) sayfa olup olmadığını anlamaya çalışın. IIS istatistiklerinin günlüğe kaydedildiğinden emin olun ve sonra da zaman içinde bir artış olup olmadığına bakın. Checkout Log Analyer (http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1864).

Oh, ve StackExchange mini profilerini unutma. http://code.google.com/p/mvc-mini-profiler/ URL'nin soruna neden olduğunu anladıktan sonra.

Ayrıca, yerinde yakaladığınız .NET hatalarını da göz ardı etmeyin :-)

Ne gördüğünü bize bildirin. -Chris


6
2018-02-27 19:29



Merhaba Chris - yardımlarınız için teşekkürler. Ne yazık ki, biz onları tutmak için disk alanı (50Gig + / d) istekleri / sn diğer sunucular açısından oldukça standart olarak biz, günlük dosyaları üretmiyoruz. Ayrıca, biz aslında mini-profiler kullanıyoruz ve hiç sorun yok, çok uzak. Bu sorun hakkında garip bir şey, aralıklı doğası :( - Dave
Dave, w3wp.exe işlemciyi tüketmekte olduğunu doğruladı mı? Belki de spike sırasında IIS oturumunu etkinleştirebilirsiniz? Diğer seçenek, x'ten uzun süren talepler için Başarısız İstek İzleme ayarlanmasıdır. Bu, IIS düzeyinde herhangi bir sorun gösterir. Şüphelendiğiniz gibi, sorun büyük olasılıkla .net seviyesinde. - Chris Anton
Evet - w3wp.exe - herhangi bir yardım için tekrar teşekkürler. - Dave


Dökümün analizini gerçekleştirmek için DebugDiag 1.2 kullanın:

https://www.microsoft.com/download/en/details.aspx?id=26798 

Birden fazla iş parçacığı kullanabilen herhangi bir işlemin, bir sunucunun tüm işlemcilerinde kullanımı% 100'e zorlayabileceğinin farkında olmak yararlıdır. Bu yerel kodu ve hatta çekirdek os bileşenlerini içerir.

Windows 2008 R2 için daha ciddi hata düzeltmelerini almayan Windows Update ile "en son yamalı" dediğinizde.

Özellikle, uygulama uzak paylaşımlardaki herhangi bir dosyaya erişiyorsa, dosya sistemi düzeltmelerinin uygulanması iyi bir fikir olacaktır:

Windows Server 2008 ve Windows Server 2008 R2'deki Dosya Hizmetleri teknolojileri için şu anda kullanılabilen düzeltmelerin listesi
http://support.microsoft.com/kb/2473205 


3
2018-02-27 19:49





HashDos saldırısı tarafından hedeflenip hedeflenmediğini kontrol edin ve istek sınırlarını ayarlayın.


1
2018-02-27 13:03



Aslında bunu inceledik - ve son MS yamasını uyguladık - ki bu sözde bu sorunu hafifletiyor - Biz aslında sitenize saldırmaya çalışan bir web sitesi üzerinden koştuk - ve biz 'geçtik' (siteyi hatırlayamıyorum, gerçi) - Dave
İle test edebilirsiniz github.com/FireFart/HashCollision-DOS-POC - jamespo