Jakie metody są dostępne, aby uzyskać użycie procesora w wierszu poleceń systemu Linux? [Zamknięte]


12

Wiemy, że topjest to polecenie pozwalające uzyskać użycie procesora w systemie Linux, a inne sposoby obejmują cat /proc/statużycie tego przez top.

Jakie są inne metody uzyskania wykorzystania procesora w wierszu poleceń systemu Linux?

Scenariusz przypadku użycia: wynik tego polecenia zostanie wykorzystany przez skrypt do ciągłego rejestrowania użycia procesora. topi /proc/statpodać szczegółowe użycie, które jest trudne do zarejestrowania. Czy istnieje łatwiejszy sposób na uzyskanie informacji o procesorze?


3
co jest nie tak z tymi, które zacytowałeś?
pataluc

@pataluc Podaje bardziej szczegółowe informacje. Potrzebuję ogólnego użycia procesora, powiedzmy, że użyty procesor: 91% wykorzystany Mem: 78% Mem wolny: 22% coś takiego ..
fasil

zobacz odpowiedź Nathana ... możesz uzyskać sedwynik, jeśli tylko chcesz wartość.
pataluc

Głosowanie na zakończenie jako „nie konstruktywne”. Od superuser.com/help/dont-ask : „ Aby zapobiec oznaczeniu i ewentualnemu usunięciu twojego pytania, unikaj zadawania subiektywnych pytań, gdzie… wraz z pytaniem udzielana jest twoja odpowiedź, a oczekujesz więcej odpowiedzi:„ Używam ______ do ______ , czego używasz?'
bwDraco

3
@DragonLord w rzeczywistości istnieją dość ograniczone sposoby na zrobienie tego, a dwie odpowiedzi tutaj są w rzeczywistości przydatne. Mój wskazuje na bardzo powszechne nieporozumienie, topa drugi daje bardzo przydatne polecenie. To nie jest ja używam X, a ty? pytanie, ale pytanie Jak mam zrobić pytanie X. Głosowanie w celu ponownego otwarcia.
terdon

Odpowiedzi:


14

Jak powiedzieli inni, prawdopodobnie najlepszym sposobem jest top. Wymaga to drobnych poprawek i analizy, ale możesz to zrobić, aby uzyskać bieżące wykorzystanie procesora jako procent.

topdzieli użycie procesora między użytkownika, procesy systemowe i niceprocesy, chcemy sumę trzech. Możemy więc działać topw btrybie ATCH, który pozwala nam analizować jego dane wyjściowe. Jednak, jak wyjaśniono tutaj , pierwsza iteracja top -bzwraca wartości procentowe od uruchomienia, dlatego potrzebujemy co najmniej dwóch iteracji ( -n 2), aby uzyskać bieżący procent. Aby przyspieszyć, możesz ustawić dopóźnienie między iteracjami na 0.01. Wreszcie grepwiersz zawierający procenty procesora, a następnie wykorzystany gawkdo zsumowania procesów użytkownika, systemu i ładnych procesów:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Pomyślałem, że możesz uzyskać te informacje ps -o pcpu ax, dodając% wykorzystania każdego uruchomionego procesu. Niestety, jak wyjaśniono tutaj , ps„zwraca procent czasu spędzonego w trakcie całego cyklu życia”, co nie jest tym, czego potrzebujesz.


EDYTOWAĆ

Na podstawie Twojego komentarza twoja wersja topróżni się od mojej i powinieneś użyć tego:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Aby uniknąć problemów z lokalizacją, ustaw ustawienia regionalne na C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Usunąłem odpowiedź, ponieważ to, co powiedziałeś, jest poprawne. Ta wydaje się być prawidłową metodą.
Nathan C

@NathanC Myślałem, że twoja odpowiedź też jest poprawna, to właśnie ja bym odpowiedział. Potem to przetestowałem i byłem zaskoczony :).
terdon

@terdon Dzięki za szczegółową odpowiedź ... Nie mogłem uzyskać danych wyjściowych dla powyższego polecenia. Czy wymagana jest jakakolwiek modyfikacja składniowa ..
fasil

@fasil nie, powinno działać. Jaki jest problem? Jakieś komunikaty o błędach?
terdon

@terdon Nie otrzymuję żadnych danych wyjściowych dla kompletnego polecenia .. z #top -bn 2 -d 0.01 Otrzymuję pełny wynik, ale po dodaniu grep '^% Cpu' nie widzę żadnych danych wyjściowych, tylko monity zwracają nie błąd ...
fasil

9

sarjest ostatecznym sposobem na zrobienie tego. Na przykład sar -uwyświetli coś takiego:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Nie mówisz, którego Linux używasz, ale w CentOS / RedHat musisz zainstalować sysstatpakiet, i myślę, że tak samo jest w Debian / Ubuntu.

Możesz także użyć sar do zbierania statystyk ad hoc :

sar -o /tmp/sar.out 60 600

Będzie zbierał statystyki co 60 sekund 600 razy, więc 600 minut.


1
Powinieneś chyba powiedzieć inaczej. Linia, którą opublikowałeś, będzie mierzyć co 60 sekund, 600 razy. Sposób, w jaki czytałem twój post, był taki, że 600 to czas trwania, więc jeśli wstawię 30 600, zajmie to co 30 sekund przez 600 minut, ale tak naprawdę zajmie to co 30 sekund 600 razy.
James McDonnell
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.