Jak mogę uzyskać najlepsze statystyki procesora z powłoki?


12

Próbuję uzyskać dokładny odczyt mojego używanego procesora (w procentach) top. Oto polecenie, które uruchamiam do testowania:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Zwraca to:

10.7%us,

Który z nich chcę. Jednak za każdym razem, gdy uruchamiam polecenie, otrzymuję takie same dane wyjściowe, mimo że stosuję różne obciążenia w moim systemie (nie wspominając już htopo tym, że moje użycie jest inne). Wygląda na to, że za każdym razem, gdy uruchamiam top, użycie procesora jest takie samo. Dopiero po kilku klatkach daje mi odpowiednie wartości.

Nie wydaje się, żebym mógł w ten sposób analizować dane wyjściowe top, więc szukam innych niezawodnych aplikacji, które dadzą mi dokładny odczyt z powłoki. Naprawdę podoba mi się, jak htopmogę uzyskać odczyt na rdzeń.

Próbowałem iostati mpstatale wydają się dawać niedokładne wartości i „powolnych zmian”.


2
Nie rób Prawidłowe pytanie, jakie należy zadać, to: Jak uzyskać najlepsze statystyki wykorzystania procesora z powłoki?
Stéphane Gimenez,

@ StéphaneGimenez dzięki
Zmieniłem

Odpowiedzi:


12

Używam tego skryptu (z tego wątku na tablicach Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

Linux ma kilka świetnych informacji w / proc / - zobacz linux.die.net/man/5/proc dla wszystkich dodatków. Uważaj tylko, że to tylko Linux. Naprawdę nie ma wieloplatformowego sposobu na uzyskanie tych informacji, chyba że użyjesz biblioteki takiej jak Sigar .
Pat Notz,

Pomysł jest dobry, ale niektóre szczegóły są niepoprawne. Wartość bezczynności to piąta kolumna i należy również dodać kolumnę iowait (szósta kolumna), aby uzyskać rozsądny procent. Aby być w pełni poprawnym, musisz również dodać wszystkie wartości „odpoczynku”, ale często są one bardzo małe.
Peter Eisentraut,

Wartość bezczynności to piąta kolumna, jeśli zliczasz kolumnę „procesora”. W przeciwnym razie jest to czwarty.
SunSparc,

6

Sprawdź również sar . Implementacje mogą się znacznie różnić od nix do nix, ale powinny dawać podstawowe statystyki systemowe przy danych migawkach. Nie jestem pewien, jak dokładne wartości są w punkcie, w którym polecenie jest najpierw inicjowane, ale można bawić się, aby zobaczyć jak to porównać do top, iostatitp

Dane wyjściowe są oparte na kolumnach, podobnie jak górne, więc powinieneś być w stanie przesyłać dane do wyników awklub cutmanipulować wynikami.


Próbowałem sarwcześniej z mieszanymi wynikami. Mam zamiar przejść tutaj z odpowiedzią @ jasonwryan, ponieważ mogę ją łatwo zmodyfikować, tak aby reprezentowała użycie obu moich rdzeni procesora.
n0pe


0

To, co znalazłem, jest podobne do osoby, która zadała powyższe pytanie, przynajmniej na CentOS 6. Jeśli uruchomię górę w trybie wsadowym tylko dla jednej iteracji, wydaje się, że zbiera tę samą liczbę, prawie tak, jakby jej tendencją było zaczynać od tego, co ostatnio pamięta wyświetlanie. Top wydaje się potrzebować zebrać co najmniej kilka liczb, aby uzyskać delty zapewniające prawidłowe wartości procentowe. Po przetestowaniu ponad 10 iteracji odkryłem, że druga wyskakująca liczba pokazuje wystarczające zróżnicowanie przy każdym uruchomieniu. Łatwo więc przejść przez tę linię

top -b -n 2 | grep Cpu | tail -1

Lubię włączać to z czasem uptime do ładowania i filtrem grep wybranych procesów z ps, takich jak zapytania postgres. Bardzo prosty monitor można wyrazić za pomocą aliasu:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.