Zapisywanie dziennika użycia procesora / pamięci RAM przez pewien okres czasu w celu zapisania w CentOS

8

Szukam aplikacji lub wiersza kodu, który pozwoliłby mi obserwować proces, zapisać informacje w wielu zmiennych, a następnie umieścić zebrane informacje w pliku.

Próbowałem z odmianami, topale bez powodzenia. Korzystam z kilku serwerów wirtualnych CentOS, VM to 2 GB pamięci RAM, 2 procesory.

Skrypt działający przez określony czas podczas pisania wierszy z informacjami w pliku tekstowym, więc na końcu mogę mieć coś w rodzaju tabeli z danymi, by działał.

Zamierzam wykonać test warunków skrajnych na serwerze i chciałbym mieć dane do stworzenia statystyk.

keponk
źródło

Odpowiedzi:

11

Standard pswystarczy.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

wynik:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Pierwsze pole to użycie procesora w%, drugie to zużycie pamięci fizycznej w kilobajtach.

Whitequark
źródło
to świetnie, stworzyłem już długi skrypt, aby wyczyścić wszystkie dane z najwyższej partii wyjściowej, ale jest to o wiele łatwiejsze i bardziej skuteczne, dziękuję bardzo!
keponk
na koniec nadal używałem mojego skryptu, ponieważ ps daje mi średnią wartość obciążenia, która jest zwykle taka sama jak% procesora, ale nie jest regułą, więcej informacji na ten temat w szybkim wyszukiwaniu w Google
keponk
1
% Procesora tutaj nie jest% wykorzystanym w danym przedziale, ale średnim procentem w całym czasie działania programu. Uważam, że jest to mylące.
Will Sewell,
2

Jeśli zależy Ci na precyzyjnym taktowaniu i chcesz mieć procesor w procentach:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'
Aalex Gabi
źródło
1

Sugerowałbym sadc/ sar.

Wstrzymano do odwołania.
źródło
Czy to nie dotyczy tylko całego systemu?
whitequark
@whitequark: To zależy od wersji sar. Niektóre wersje używają sar -x PIDinnych pidstat -p PID.
Wstrzymano do odwołania.
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
saji89
0

Próbujesz zaobserwować, ile czasu procesora wymaga dany proces.

Chciałem zaproponować narzędzie statystyki procesora dla CentOS? ale to dotyczy całego systemu, a nie tylko jednego procesu.

Każdy proces pokaże czas procesora na wyjściu ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 to godziny / minuty / sekundy procesora. Skumuluje się.
  • Będziesz potrzebować uprawnień, aby to zobaczyć, jeśli użytkownik nie jest tobą.
  • Gdy wartość ta przekroczy jeden dzień, format się zmienia; powyżej to 2 dni. Twoja parsowanie będzie musiało sobie z tym poradzić.

W tym momencie, przeanalizuj dane wyjściowe za pomocą Pythona, przeprowadź na nim matematykę randkową, a będziesz złoty.

Kevin J. Rice
źródło
0

Poniższe polecenie pobiera średnie zużycie procesora i pamięci co 40 sekund dla określonego procesu (pid)

pidstat 40 -ru -p <pid>

Dane wyjściowe dla mojego przypadku (pierwsze dwa wiersze na użycie procesora, drugie dwa wiersze na pamięć):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java
Celik
źródło