To pytanie niepokoi mnie od dłuższego czasu i wydaje mi się, że nie mogę znaleźć w Internecie niczego, co by o tym mówiło. Mam serwer z uruchomionym VMware Hypervisor ESXi. Kiedy uruchamiam na nim maszyny wirtualne, zwykle zajmują 2-3 minuty; niezbyt długi czas, ale nie natychmiastowy. Jednak gdy patrzę na dzienniki wydajności na serwerze, ani użycie procesora, pamięci RAM, ani dysku nie wynosi około 100%; zwykle wynoszą one średnio około 60% -80%. Więc jeśli serwer ma coś do zrobienia, dlaczego nie robi tego w 100%?
Wydaje mi się, że w dowolnym momencie składnik ograniczający wydajność powinien działać na 100%. Na przykład, jeśli mam naprawdę wolny dysk twardy, prawie zawsze powinien on działać na 100%. Dlatego przynajmniej jeden z obszarów (procesor, pamięć RAM, dysk i sieć) powinien zawsze mieć wartość 100%, chyba że serwer jest w stanie bezczynności.
Dlaczego tak nie jest?
źródło
Odpowiedzi:
Opóźnienie będzie jednym z powodów. Opóźnienie między „dyskiem daje mi te dane, których potrzebuję, zanim będę mógł zrobić cokolwiek innego”, a czas odzyskania danych spowoduje, że procesor pozostanie bezczynny przez ten czas.
Zasoby prawdopodobnie działają na 100%, ale przez bardzo krótkie okresy. Uruchamianie systemu operacyjnego będzie przebiegać zgodnie z ogólnym schematem „przetwarzaj lub decyduj o czymś, pobierz coś z dysku, zrób coś w pamięci, zrób z urządzeniem”, powtarzając wiele razy na sekundę. Kiedy więc zobaczysz dysk w 25% w ciągu 2 sekund, prawdopodobnie oznacza to, że pracował on na 100% przez 0,5 sekundy, a następnie bezczynnie przez resztę czasu.
Jak wskazał EEAA, systemy wielordzeniowe sprawiają, że jest to nieco bardziej złożone. Jedno wątkowe oprogramowanie na procesorze, które może wykonywać cztery wątki, może osiągnąć tylko 25% przy pełnej prędkości. Nawet oprogramowanie wielowątkowe rzadko osiąga wartość 100%, ponieważ dane muszą przepływać (zwykle) z dysku twardego, do pamięci RAM, do pamięci podręcznej lub do procesora. Utrzymanie tego pełnego rurociągu jest trudne i zwykle dzieje się tak przy przewidywalnych obciążeniach, takich jak kodowanie wideo. W takim przypadku system operacyjny może obserwować wzorce odczytu i pobierać dane przed ich użyciem, umieszczając je w odpowiednich pamięciach podręcznych, takich jak pamięć podręczna dysku w pamięci RAM.
źródło
Myślicie o tym w bardzo uproszczony sposób, co powoduje, że przyjmujecie niepoprawne założenia, które spróbuję wyjaśnić.
Po pierwsze, i potencjalnie najprościej, w systemie wielordzeniowym, aby zrozumieć wykorzystanie procesora, należy wziąć pod uwagę, czy obciążenie procesowe jest wielowątkowe, i zaprojektować je tak, aby korzystało z wielu rdzeni. Jeśli tak nie jest, w zależności od kombinacji uruchomionych procesów może nigdy nie być w 100% używany. Zawsze.
Po drugie, należy wziąć pod uwagę wydajność urządzenia IO. Skąd twój system wie na przykład, ile IOps jest w stanie obsłużyć twoje urządzenia? Tak nie jest. Bardziej znaczącą miarą, którą możesz obserwować, jest twoja
iowait
wartość podczas uruchamiania (która może być trudna do uzyskania podczas uruchamiania) lub kolejki dyskowe / opóźnienie podczas uruchamiania (które powinno być łatwiejsze do uzyskania od hiperwizora). Jeśli widzisz kolejki lub skoki opóźnień, prawdopodobne jest, że Twoje urządzenia IO przyczyniają się do problemów z wydajnością.źródło
Pracuję z serwerem od około 20 lat, zwykle nie jest dobrą rzeczą, gdy składnik działa przez cały czas w 100%.
Załóżmy na przykład, że masz bazę danych SQL, której nie chcesz zamieniać na dysk, ale zamiast tego chcesz całkowicie zabraknąć pamięci.
Jeśli Twoja baza danych ma 24 GB, a system operacyjny potrzebuje 8 GB, nie chcesz przeznaczać tylko 32 GB pamięci RAM na maszynę, istnieje wiele „rzeczy”, które mogą pójść nie tak, zły kod, DDOS, duże obciążenie aplikacji, kto wie, nie mając żadnego miejsca na głowie, skąd wiesz, że serwer ma kłopoty?
W naszym centrum danych znajduje się około 2000 serwerów, lubimy widzieć, jak wszystkie działają przy około 75% mocy procesora i pamięci RAM, miejsce w HD jest na naszej sieci SAN, więc jest to zupełnie inna kula wosku. Mamy również alerty informujące nas, gdy osiągną 85% procesora lub pamięci RAM, oraz alarmy informujące nas, gdy osiągną 90%.
źródło