Neden sunucular her zaman maksimumda çalışmıyor?


12

Bu bir süredir beni rahatsız eden bir soru ve bu konuyu anlatan çevrimiçi bir şey bulamıyorum. VMware Hypervisor ESXi çalıştıran bir sunucum var. Üzerinde sanal makineler açtığımda, önyükleme yapmak genellikle 2-3 dakika sürer; çok uzun bir süre değil, ama anlık değil. Ancak, sunucudaki performans günlüklerine baktığımda, işlemci, RAM veya disk kullanımı% 100 civarında değil; genellikle ortalama% 60-% 80 civarındadır. Yani sunucunun yapacak işi varsa neden% 100'de yapmıyor?

Bana öyle geliyor ki, herhangi bir anda performansı sınırlayan bileşenin% 100'de çalışması gerekiyor. Örneğin, gerçekten yavaş bir sabit sürücüm varsa, neredeyse her zaman% 100'de çalışmalıdır. Bu nedenle, sunucu tam olarak boşta değilse, alanlardan en az birinin (işlemci, RAM, disk ve ağ) her zaman% 100 olması gerekir.

Neden böyle değil?


Systemd tabanlı olmayan eski Linux dağıtımları, başlatmayı verimli bir şekilde paralelleştiremedi. * BSD'ler hala bundan muzdariptir. Modern bir Linux dağıtımını başlatın ve nasıl farklı olduğunu görün.
Michael Hampton

Yanıtlar:


18

Gecikme bir sebep olacaktır. "Disk arasındaki gecikme bana başka bir şey yapmadan önce ihtiyacım olan bu veriyi verir" ve verinin geri alınma zamanı CPU'yu boşta bırakacaktır.

Kaynaklar muhtemelen% 100, ancak çok kısa süreler için çalışıyor. Bir işletim sistemi önyükleme, "bir şeyi işlemek veya karar vermek, diskten bir şey almak, bellekte bir şey yapmak, bir aygıtla bir şey yapmak" genel modelini izler ve saniyede birçok kez tekrar eder. Dolayısıyla, 2 saniyelik bir süre içinde% 25 oranında bir disk gördüğünüzde, muhtemelen 0,5 saniye boyunca% 100'de çalıştığı anlamına gelir.

EEAA'nın işaret ettiği gibi çok çekirdekli sistemler bunu biraz daha karmaşık hale getiriyor. Bir CPU üzerinde dört iş parçacığı çalıştırabilen tek iş parçacıklı bir yazılım parçası, tam hızda çalışırken yalnızca% 25'e vurabilir. Çok iş parçacıklı yazılımlar bile nadiren% 100'e vurabilir, çünkü verilerin (genellikle) sabit diskten RAM'e, önbelleğe, CPU'ya akması gerekir. Bu boru hattını dolu tutmak zordur ve çoğunlukla video kodlama gibi öngörülebilir iş yükleriyle gerçekleşme eğilimindedir. Bu durumda, işletim sistemi okuma kalıplarını gözlemleyebilir ve gerekmeden önce verileri alabilir ve RAM'deki önbellek gibi uygun önbelleklere yerleştirebilir.


16

Bunu çok basit bir şekilde düşünüyorsunuz.

İlk olarak ve potansiyel olarak en basit şekilde, çok çekirdekli bir sistemde, CPU kullanımını anlamak için, işlem yükünün çok iş parçacıklı olup olmadığını ve birden çok çekirdekten faydalanmak üzere tasarlanmış olup olmadığını dikkate almanız gerekir. Aksi takdirde, çalışan işlemlerin karışımına bağlı olarak% 100 kullanım göremeyebilirsiniz. Hiç.

İkinci olarak, IO cihaz performansını dikkate almanız gerekir. Sisteminiz, örneğin, cihazlarınızın kaç tane IOps kapasitesine sahip olduğunu nasıl biliyor? Öyle değil. İzlemeniz için daha anlamlı bir ölçüm, iowaitönyükleme sırasındaki değeriniz (önyükleme işlemi sırasında elde edilmesi zor olabilir) veya önyükleme sırasında disk sıraları / gecikmesi (hipervizörünüzden daha kolay elde edilmesi gerekir). Kuyruklar veya gecikme artışları görürseniz, G / Ç aygıtlarınızın performans sorunlarınıza katkıda bulunan bir faktör olması muhtemeldir.


11

Yaklaşık 20 yıldır sunucu ile çalışıyorum, bir bileşen her zaman% 100'de çalışırken genellikle iyi bir şey değildir.

Diyelim ki, diske takas etmek istemediğiniz, bunun yerine tamamen bellekten çıkmak istediğiniz bir SQL veritabanınız olduğunu varsayalım.

Veritabanınız 24GB ise ve işletim sisteminin 8GB'a ihtiyacı varsa, makine için sadece 32GB RAM ayırmak istemezsiniz, yanlış gidebilecek bir çok şey, kötü kod, DDOS, ağır uygulama kullanımı, kim bilir, herhangi bir kafa odası yok nasıl sunucu dertte olduğunu biliyor musunuz?

Veri merkezimizde yaklaşık 2000 sunucumuz var, hepsinin yaklaşık% 75 CPU ve RAM'de çalıştığını görmeyi seviyoruz, hhd alanı SAN'ımızda, bu yüzden tamamen farklı bir balmumu topu. Ayrıca,% 85 CPU veya RAM'i vurduklarında bize bildiren uyarılarımız ve% 90'ı vurduklarında bize bildiren alarmlar var.


Sanırım burada biraz yolun açık. Sanal makineleri çalıştırdığımı söyledim, bu yüzden istekleri alır ve kaynakları ayırdığında çalışan bir veritabanı sunucusundan çok farklı tutarlı bir yük var. Performans kaynaklarının ne olduğu konusunda endişeliydim, bu kaynakların nasıl tahsis edildiği değil. Ama cevap için teşekkürler!
Çekirdek
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.