Có một công cụ có thể giám sát việc sử dụng băng thông của một quy trình không?


15

Tôi đã tìm thấy một màn hình đẹp cho phép tôi ghi lại nhiều loại dữ liệu thời gian chạy của một quy trình. Tôi đang tìm kiếm một tương đương mà sử dụng băng thông tương tự. Lý tưởng nhất, lệnh nên như thế nào bwmon --pid 1 --log init.log. Có như vậy không? Nó có thể chạy mà không có đặc quyền quản trị?



Câu trả lời:


3

một cái gì đó để bạn bắt đầu (chỉ trong trường hợp bạn muốn tự viết nó):

#!/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

bình luận:

  • chỉ kiểm tra eth0
  • kiểm tra cứ sau 1 giây
  • chỉ hoạt động trong linux, nhưng các unix khác hoạt động tương tự (Procfs hoặc bất cứ điều gì)
  • đầu ra có thể được lưu trữ vào một sqlite.db với stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3

11
Tôi không nghĩ rằng đây thực sự là một bộ đếm theo quy trình; Tôi nghĩ rằng đó chỉ là tổng số giao diện theo quan điểm của quá trình. Tôi đã chạy một nccặp máy khách / máy chủ qua localhost, gửi một byte mỗi giây và xem /proc/<listening-nc-pid>/net/dev. Sau đó, tôi chạy một nccặp thứ hai , gửi với tốc độ tối đa. Tệp tôi đang xem rất rõ ràng đã đếm dữ liệu của cặp thứ hai cùng với dữ liệu của cặp thứ nhất. Chạy trên Linux 2.6.32.
Jander

Tôi đã có một lỗi function strftime never defined; nó đã được sửa bằng cách cài đặt gawk .
tshepang

4
@Jander Đúng vậy, /proc/<pid>/net/dev/proc/net/devcó cùng nội dung ở đây. Do đó, scipt chỉ báo cáo lưu lượng cho eth0, không phải cho quy trình nhất định.
SCAI

1
Xác nhận rằng đây không phải là một câu trả lời. Nó đo bộ đếm giao diện cho eth0, như được thấy trong quá trình. Nó không tính dữ liệu được gửi bởi quá trình thông qua giao diện đó.
Navin

@Navin một câu trả lời là bất cứ điều gì cố gắng trả lời câu hỏi. Một câu trả lời sai vẫn là một câu trả lời. Nếu điều này là sai, thì bạn có thể đánh giá thấp nó, nhưng nó vẫn là một câu trả lời.
terdon

6

Nếu bạn hài lòng với băng thông I / O chung được sử dụng (hoặc nếu chương trình của bạn gần như hoàn toàn nối mạng I / O), thì bạn có thể xem /proc/<pid>/iotệp. Bạn muốn rcharwcharcác lĩnh vực. Bạn có thể muốn trừ read_byteswrite_bytes, vì chúng đại diện cho việc đọc và ghi vào lớp lưu trữ. Xem phần 3.3 của http://www.kernel.org/doc/Documentation/filesystems/proc.txt .

Nếu bạn cần thêm độ phân giải .... bạn có thể sử dụng kịch bản này bằng cách sử dụng lsofstracemặc dù sẽ rất khó để xử lý đúng các trường hợp góc. Ý tưởng cơ bản là để phân tích đầu ra của strace -p <pid>, lấy các tham số đầu tiên (= mô tả tập tin) và giá trị trả về (= số byte) từ read(), write(), send(), và recv()các cuộc gọi ( Chú ý có nhiều nhiều syscalls để lắng nghe, tôi thiên đường' t theo dõi tất cả xuống). Loại bỏ các giá trị âm; họ chỉ ra lỗi. Sử dụng lsof -p <pid>để tìm ra bộ mô tả tệp nào là ổ cắm TCP / UDP và cộng tổng số trên mỗi fd. Chiến lược này không yêu cầu root miễn là bạn sở hữu quy trình bạn đang kiểm tra, nhưng nó sẽ thực sự có lông để viết, chứ đừng nói là viết tốt.


3

thử nethogs :

NetHogs là một công cụ 'net top' nhỏ. Thay vì phá vỡ lưu lượng trên mỗi giao thức hoặc trên mỗi mạng con, giống như hầu hết các công cụ khác, nó nhóm băng thông theo quy trình. NetHogs không dựa vào một mô-đun hạt nhân đặc biệt để được tải. Nếu đột nhiên có rất nhiều lưu lượng truy cập mạng, bạn có thể kích hoạt NetHogs và ngay lập tức xem PID nào đang gây ra điều này. Điều này giúp dễ dàng xác định các chương trình đã bị lỗi và đột nhiên chiếm băng thông của bạn.

2
Đáng buồn thay, nó không thể theo dõi một quá trình duy nhất và nó không đăng nhập. Yêu cầu thứ hai (đăng nhập) là quan trọng hơn nhiều so với yêu cầu đầu tiên mặc dù. Ồ, và nó không chạy mà không có đặc quyền của quản trị viên :(
tshepang

1
Bạn gần như chắc chắn sẽ cần đặc quyền root cho việc này.
Falmarri

Bạn có thể thử sử dụng nethogs với cờ -t (tracemode). Kết quả đầu ra sau đó có thể được phân tích cú pháp để trích xuất lưu lượng của quy trình đơn lẻ mà bạn quan tâm.
Valerio Schiavoni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.