Windows Server'da çalışan işlemler listesinin dışında bellek kullanımı nasıl açıklanır


9

Biraz yavaş çalışan bir Windows 2003 Server var ve sonunda yeniden başlatma kadar kadar taahhüt ücreti ve sayfa dosyası kullanımı yukarı ve yukarı işaretleyin. Bunu düzeltmek için tüm hafızayı neyin tükettiğini bulmam gerekiyor ve bu büyük gizemin olduğu yer.

Görev Yöneticisi'nden güncel istatistikler:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

Güzel, şimdi SysInternals Process Explorer'ı açalım ve çalışan her şeyin çalışma kümesi boyutunu kontrol edelim . En büyük suçlu, 121,980K WS, 481,284K VM Boyutu kullanan bir Tomcat örneğidir. Orada hiçbir şey 5 GB taahhüt ücretini açıklamaya yaklaşamaz.

Sonraki adım: SysInternals pslist :, pslist -mçıktıyı sütuna göre bölün ve rapor edilen 61 işlem için sütun toplamlarını hesaplayın.

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

Araçların bildirdiklerini temelden yanlış anlıyor muyum? Bir işletim sisteminin aslında bir işlem tarafından eşleştirilen tüm sanal bellek miktarından çok daha az bellek işleyeceği, aslında hiç bu kadar fazla kullanmayacağı ve burada VM'ye bakmanın Kırmızı ringa.


1
Güncelleme: Evet, bu sistem çağrı yapıyor ve sık sık "Sanal bellek yetersiz" uyarısı alıyorum. Uyarıyı her aldığımda bellek istatistiklerini kontrol ederim ve özellikle hatalı davranan bir süreç yoktur, ancak Bellek, Taahhütlü Bayt durumu her zaman 5 GB'ın üzerindedir.
jpdaigle

Yanıtlar:


1

JP, bunun kararlı koddan daha az çalışan bir otomatik derleme / birim test sunucusu olduğu yorumuna inanıyorum her şeyi söylüyor. Benim tahminim, bu sunucu üzerinde çalışan kararsız kod muhtemelen gördüğünüz belirtileri veren bellek sızıntıları nedeniyle sık sık yeniden başlatılması gerekiyor olmasıdır. Bellek sızıntıları, çalışan işlemlerin işlem ağaçlarının hiçbirinde listelenmeyecek, çünkü artık var olmayan işlemlerle yakalanan ve onlarla ilişkili işlem çoktan gitmiş olsa bile hala tahsis edilen bellek.

Bu makinenin performans sorunlarını sergilemeye başladığı hıza bağlı olarak, belki de gece, haftada birkaç kez veya haftalık olarak bu makineyi otomatik olarak yeniden başlatmanıza izin vermek için sık bakım penceresi alın.

Windoze'de günde iki kez yeniden başlatılması gereken Oracle Application Servers sunucularımız var. Kullanıcıları öğle yemeği saatinde ve her gün gece yarısı attık. Bu, Oracle'ın sözde istikrarlı üretim koduyla birkaç yıl önceydi.


2

Sadece bazı linkleri yapıştırdığımız için üzgünüm - ancak logparser ve powershell kullanarak bellek sızıntılarını bulmak için bazı teknikler kullanıyoruz, bu yüzden paylaşacağım.

http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx

(Hata Ayıklama Asla Şüphe sitesi mükemmel): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx

Ayrıca Mark Russinovich'in Windows'ta Bellek Kullanımı ile ilgili mükemmel kavrayışına bir bağlantı vereceğim:

http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1

Gerçek Microsoft vakalarını açmadan, Performance Team sitesinde de çok iyi bilgiler var: http://blogs.technet.com/askperf/Default.aspx?p=2


1

Bunu teşhis etmeye yardımcı olan temel araç perfmon. Baktığım sayaçlar (başlangıç ​​olarak):

Bellek, Taahhüt Edilen Bayt Bu, sanal bellek
İşlemi, Çalışma Seti, "etkin" kullanımdaki toplam sanal bellek
Çağrı Dosyasını, kullanımdaki% pagefile
Belleği, Pages / Sec (bu, düşük belleğin bir göstergesi değildir) Herkes bunu varsayıyor gibi görünmesine rağmen)
Bellek, Sayfa Çıktısı / sn. RAM sayfa çerçevelerini her saniye başka amaçlarla serbest bırakmak için sayfa dosyasına kaç sanal bellek sayfası yazıldığını

Bellek, Önbellek Bayt
Belleği, Disk
Belleği Olmayan Havuz Bayt Belleği, Havuz Disk Belleği Bayt
Belleği, Sistem Kodu Toplam Bayt
Belleği, Sistem Sürücüsü Toplam Bayt

bu toplam 2 GB'a yaklaştığında, genellikle 32 bit mimari nedeniyle performans sorunlarınız olur

Bellek, Kullanılabilir MBayt - Bu, sanal bellek (yeni ayırmalar veya bir sayfayı sayfa dosyasından geri yükleme) taleplerini karşılamak için ne kadar RAM'in kullanılabilir olduğunu ölçer.

Ayrıca bkz. Http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


İlginç bir bağlantı. Bu sunucuda, 640MB'ta toplam İşlem Çalışma Setini görüyorum, ancak "Bellek, Taahhüt Edilen Bayt" 5.4GB. Bahsettiğiniz diğer sayaçların hiçbiri çok yüksek değil. Sık sık "Sanal bellek yetersiz" uyarısı alıyorum, bu yüzden araştırıyorum. OP'ye yorum ekleme.
jpdaigle

1

Bu sunucu son yeniden başlatmadan bu yana ne kadar süredir çalışıyor? Windows'un bellek sızıntıları olması talihsiz bir yaşam gerçeğidir. ayrılan bellek her zaman sisteme geri gönderilmez. Semptomlar tam olarak gördüğünüz şeydir. Henüz yapmadıysanız, haftada en az bir kez yeniden başlatmanızı öneririm. Birçok veri merkezi Windows'u her gün yeniden başlatır, çünkü bu destek çağrılarını büyük ölçüde azaltır. Tabii ki kümeleri kullandığınızda bunu yapmak çok daha kolay çünkü kesinti zamanı yok.


0

Bir yerde Windows bellek istatistiklerini gerçekten anlayan bir sistem yöneticisi olduğu söyleniyor, ancak onlarla hiç karşılaşmadım.

Bununla birlikte, yanlış davranma süreci bulmak genellikle çok zor değildir. Kulplar veya Sayfa hataları / sn. Gibi çeşitli işlem sayaçlarına bakmak için Perfmon'u kullanmayı deneyin.

JR

Diğer düşünceler: Gerçekten hafızanız az olduğundan emin misiniz? Önemli olan, çağrı alıp almayacağınızdır. Eğer disk belleği yoksa, bellekte yetersiz kalmazsınız. PerfMon'u kullanarak Memory - Pages / sn sayacına bir göz atın.


Çalışan süreçlerde belirgin bir şey görmüyorum. Bir işlemden sonra belleğin işletim sistemi tarafından geri alınmamasının olası bir yolu var mı? Bu otomatik bir derleme / birim test sunucusudur, bu yüzden elbette süreçler her zaman çöküyor, çünkü her zaman otomatik olarak SVN'den inşa edilen kanama kenarı derlemeleri çalışıyor.
09:12, jpdaigle

Diğer düşünceler için düzenlememi görün
John Rennie

0

Çalışma setinin, gerçek fiziksel bellek tarafından temsil edilen bellek biti olduğunu unutmayın. sanal bellek ücretiniz de var ve Windows kod sayfası paylaşımı yapıyor, bazı MFC parçaları bellek kullanımını çoğaltmadan çok sayıda işlem arasında paylaşılacak. Ayrıca, dosya sistemi önbelleğini olabildiğince büyük tutmak için Windows kesintisiz arzusu var (daha önce 2.5GB'lık bir dizüstü bilgisayarda 800MB'a kadar balon gördüm).

Windows bellek yönetimi çok sağlamdır. Ancak Windows disk belleği çalışmaya başladığında işler çirkinleşir ve DAİMA dosya sistemi önbelleğine her zaman her zaman yer bırakmanız gerekir. 80+ sekmelerim 1.2 gb / 1.2 + gb'ye kadar bellek tüketimini artırdığında Firefox'u rutin olarak kapatıp yeniden başlatmam gerekiyor.

Windows ayrıca, önbellekteki sayfalar ile bellek / çalışma kümesi olarak listelenen sayfalar arasındaki satırı biraz bulanıklaştırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.