Czy istnieje narzędzie, które może monitorować wykorzystanie przepustowości pojedynczego procesu?


15

Znalazłem ładny monitor, który pozwala mi rejestrować różne dane środowiska wykonawczego pojedynczego procesu. Szukam odpowiednika, który robi to samo w przypadku wykorzystania przepustowości. Najlepiej byłoby, gdyby polecenie wyglądało bwmon --pid 1 --log init.log. Czy jest taki Czy może działać bez uprawnień administratora?



Odpowiedzi:


3

coś na początek (na wypadek, gdybyś chciał napisać to sam):

#!/bin/bash
#
# usage: bwmon PID

IN=0; OUT=0; TIME=0

get_traffic() {
    t=`awk '/eth0:/ { printf("%s,%d,%d\n",strftime("%s"),$2,$10); }' < /proc/$1/net/dev`
    IN=${t#*,}; IN=${IN%,*}
    OUT=${t##*,};
    TIME=${t%%,*};
}

get_traffic $1
while true
do
    _IN=$IN; _OUT=$OUT; _TIME=$TIME
    get_traffic $1
    echo "$TIME,$(( $TIME - $_TIME )),$IN,$(( $IN - $_IN )),$OUT,$(( $OUT - $_OUT))"
    sleep 1
done

komentarze:

  • sprawdza tylko eth0
  • sprawdza co 1 sekundę
  • działa tylko pod Linuksem, ale inne uniksy działają podobnie (procfs lub cokolwiek)
  • dane wyjściowe mogą być przechowywane w pliku sqlite.db za pomocą stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3

11
Nie sądzę, że jest to licznik na proces; Myślę, że to tylko całkowita liczba interfejsów z punktu widzenia procesu. Uruchomiłem ncparę klient / serwer przez localhost, wysyłając jeden bajt na sekundę i obserwowałem /proc/<listening-nc-pid>/net/dev. Potem uruchomiłem drugą ncparę, wysyłając z maksymalną szybkością. Plik, który oglądałem, w oczywisty sposób zliczał dane drugiej pary wraz z danymi pierwszej pary. Działa w systemie Linux 2.6.32.
Jander

Miałem błąd function strftime never defined; zostało to naprawione przez zainstalowanie gawk .
tshepang

4
@Jander Zgadza się /proc/<pid>/net/devi /proc/net/devma tę samą treść tutaj. Dlatego scipt zgłasza ruch tylko dla eth0, a nie dla danego procesu.
scai

1
Potwierdzenie, że to nie jest odpowiedź. Mierzy licznik interfejsu eth0, jak widać w procesie. To nie nie liczyć danych przesyłanych przez proces przez ten interfejs.
Navin

@Navin odpowiedzią jest wszystko, co próbuje odpowiedzieć na pytanie. Źle odpowiedź nadal jest odpowiedź. Jeśli ten jest zły, możesz go zagłosować, ale nadal jest to odpowiedź.
terdon

6

Jeśli jesteś zadowolony z ogólnej przepustowości we / wy (lub jeśli twój program prawie całkowicie obsługuje sieciowe we / wy), możesz obejrzeć /proc/<pid>/ioplik. Chcesz pól rchari wchar. Możesz odjąć read_bytesi write_bytes, ponieważ reprezentują one odczyty i zapisy w warstwie pamięci. Patrz sekcja 3.3 http://www.kernel.org/doc/Documentation/filesystems/proc.txt .

Jeśli potrzebujesz więcej rozdzielczości ... możesz to zrobić za pomocą skryptu lsofi strace, choć bolesne byłoby prawidłowe załatwienie wszystkich przypadków. Podstawowym założeniem jest, aby analizować dane wyjściowe strace -p <pid>, chwytając pierwszy parametr (= deskryptor pliku) oraz wartości zwracanej (= liczba bajtów) z read(), write(), send()oraz recv()połączenia ( UWAGA istnieją jeszcze kilka syscalli nasłuchiwać; I haven” śledził je wszystkie). Odrzucić wartości ujemne; wskazują błędy. Użyj, lsof -p <pid>aby dowiedzieć się, które deskryptory plików są gniazdami TCP / UDP i zliczyć liczbę na fd. Ta strategia nie wymaga rootowania, dopóki jesteś właścicielem procesu, który sprawdzasz, ale pisanie byłoby naprawdę włochate, a co dopiero pisać dobrze.


3

spróbuj Nethogs :

NetHogs to małe narzędzie „net top”. Zamiast rozkładać ruch według protokołu lub podsieci, jak większość narzędzi, grupuje przepustowość według procesów. NetHogs nie polega na ładowaniu specjalnego modułu jądra. Jeśli nagle pojawi się duży ruch w sieci, możesz uruchomić NetHog i natychmiast sprawdzić, który PID to powoduje. Ułatwia to identyfikację programów, które oszalały i nagle zajmują przepustowość.

2
Niestety nie może monitorować pojedynczego procesu i nie loguje się. Drugi wymóg (rejestrowanie) jest jednak o wiele ważniejszy niż pierwszy. Aha, i nie działa bez uprawnień administratora :(
tshepang

1
Prawie na pewno będziesz potrzebować do tego uprawnień roota.
Falmarri

Możesz spróbować użyć nethoga z flagą -t (tracemode). Wynikowy wynik można następnie przeanalizować, aby wyodrębnić ruch z pojedynczego procesu, który Cię interesuje.
Valerio Schiavoni
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.