Dlaczego top zgłasza inne użycie procesora niż CloudWatch?

9

toppokazuje średnie zużycie procesora w godzinach szczytu około 20%, podczas gdy monitorowanie CloudWatch pokazuje średnie zużycie procesora 40%. Co powoduje tę rozbieżność?


źródło

Odpowiedzi:

15

Bardzo dobra obserwacja i na to też wpadliśmy. Oto, co znalazłem:

Ostrożnie mierz zużycie procesora z poziomu instancji EC2. Możliwe jest zauważenie zużycia procesora znacznie poniżej 100% - a jednocześnie całkowite maksymalne wykorzystanie. Zaufaj mi: byłem tam, zrobiłem to. (Nawiasem mówiąc, CloudUatch CPUUtilization jest mierzony spoza instancji i zawsze jest poprawny.)

Tutaj jest bardzo dobry opis całości: https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/

W powyższym przykładzie instancji m1.small EC2 przydzielono 0,4 jednostki procesora, a więc 40% zajętości procesora oznacza procentowe zużycie bazowego rdzenia. Ponieważ jednak 40% to maksymalny udział procesora, który można przypisać do tej maszyny wirtualnej, efektywne użycie procesora wynosi 40% / 40% = 100%. Który jest liczbą wyświetlaną przez CloudWatch.

Jeśli zastanawiasz się, skąd pochodzi 40%, matematyka jest dość prosta. System linuksowy m1.small jest uprawniony do 1 jednostki obliczeniowej EC2, która zapewnia równoważną wydajność procesora 1,0–1,2 GHz 2007 Opteron lub 2007 Xeon. Ponieważ maszyna wirtualna działa na maszynie o taktowaniu 2,6 GHz, ma prawo do 38,4% - 46,2% udziału procesora w tym konkretnym węźle XEN. Możesz uruchomić komendę cat / proc / cpuinfo, aby dowiedzieć się o architekturze procesora za instancjami EC2.

Zwróć szczególną uwagę na wskazówkę, jak postępować z narzędziami, które nie wiedzą o specjalnej matematyce:

Inną opcją, która może być wykorzystana do modernizacji istniejących narzędzi monitorowania opartych na agencie lub SNMP, które nie integrują się z CloudWatch, jest użycie pomiaru bezczynności procesora. Wszystko, co musisz zrobić, to przepisać reguły, aby zmierzyć bezczynność procesora zamiast zajętości procesora. Np. Jeśli masz zdefiniowany> 75% próg dla zajętości procesora, utwórz regułę <25% dla bezczynności procesora. Jeśli bezczynność procesora wynosi 0, serwer jest związany z procesorem.

Bardzo prosta. Bardzo dobrze.

Podczas uruchamiania na górze w instancji EC2, mierzy ona użycie procesora przez fizyczny rdzeń, na którym działa instancja i inne. To użycie jest niepoprawne, jeśli chcesz mierzyć użycie procesora przez samą instancję (jednostka obliczeniowa EC2 przypisana do Twojej instancji).

Właśnie dlatego pomiary w chmurze są prawdziwe, ponieważ są mierzone na zewnątrz instancji dla jednostek obliczeniowych EC2 przypisanych tylko do Twojej instancji.

Zobacz tutaj - https://forums.aws.amazon.com/thread.jspa?threadID=99993

Chida
źródło
Innymi słowy, oba mają rację, ale mierzą różne rzeczy.
bahamat
1
Możesz to tak ująć. Jednak OP obawia się, że to, co myśli, że widzi, nie jest tym, co twierdzi Amazon. W jego przypadku najlepsze dane są dla niego niepoprawne. Jeśli jednak zmierzysz użycie procesora przez rdzeń podstawowy w celu debugowania problemów z wydajnością, bardzo przydatne jest uruchomienie go na najwyższym poziomie. Jeśli martwisz się tylko użyciem instancji, możesz wybrać chmurkę. Tak, oba mierzą różne rzeczy.
Chida
1
Wydaje mi się, że powinienem był podążać za moim stwierdzeniem: „pierwsze jest tym, czego myślisz, że chcesz, drugie jest tym, czego naprawdę chcesz”, ale myślałem, że to już zostało omówione.
bahamat
+1 za to, co właśnie powiedziałeś :)
Chida
1
Pobrałem zawartość martwego linku z maszyny powrotnej i dodałem go bezpośrednio do postu.
Johano Fierra