Kiedy wykonuję następujące polecenie, aby uzyskać użycie procesora, otrzymuję ładne + użycie procesora przez użytkownika.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Wynik:
14.5
Tutaj mam problem z tym, że wynik zależy od polecenia top, więc nie zmienia się natychmiast jak polecenie top. Więc nie otrzymuję od razu poprawnego procesora. Daje to samo wyjście i nie zmienia się.
Chcę uzyskać użycie procesora w czasie rzeczywistym w danych wyjściowych. Pomóż mi ulepszyć moje polecenie.
command-line
top
Ketan Patel
źródło
źródło
Odpowiedzi:
Jeśli możesz sobie pozwolić na opóźnienie wynoszące jedną sekundę, wydrukuje to użycie procesora jako prosty procent:
(Bez jednosekundowego opóźnienia
vmstat
można wydrukować tylko wartości średnie od uruchomienia).źródło
vmstat 1 2
ten sposób:echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
W przeciwnym razievmstat
podasz wartości od bootowania, co prawdopodobnie nie jest tym, czego szukasz.Jest to znany problem z
top
. Jak wyjaśniono tutaj , pierwsza iteracjatop -b
zwraca wartości procentowe od uruchomienia, dlatego potrzebujemy co najmniej dwóch iteracji (-n 2
), aby uzyskać bieżący procent. Aby przyspieszyć, możesz ustawićd
opóźnienie między iteracjami na0.01
.top
dzieli użycie procesora między użytkownika, procesy systemowe inice
procesy, chcemy sumę trzech. Wreszciegrep
wiersz zawierający procenty procesora, a następnie wykorzystanygawk
do zsumowania procesów użytkownika, systemu i ładnych procesów:źródło
top
będą zgłaszać procent użycia jako procent jednego procesora. Oznacza to, że często otrzymasz znacznie wyższy odsetek. Zobacz punkt 9 tutaj .top
w trybie interaktywnym (po prostu uruchomtop
), a następnie naciśnijI
(shift + i), aby zobaczyć podział według rdzeni.Próbowałem na kilka sposobów, ale wydaje mi się to najbardziej dokładne:
Mam to stąd
źródło
%.1f
co, moim zdaniem, jest bardziej czytelne dla człowieka i przydatne, jeśli użyjesz tego wyjścia w innych skryptach.Zastosowanie
-n2
. Spowoduje to wyświetlenie dwóch wierszy. Pierwszy raztop
drukuje linię nie kwalifikuje się do stanu w tym momencie. Następnie dostosuj skrypt, aby zignorować pierwszy wiersz.źródło