Hạn chế thông lượng mạng của một quá trình đã được đưa ra? (Linux / FreeBSD)


10

Có tiện ích nào để hạn chế thông lượng mạng của một quá trình sau khi nó được đưa ra không? Ví dụ đơn giản: bạn lưu ý rằng người dùng sẽ lấy tất cả băng thông tải lên của bạn bằng scp và bạn muốn giới hạn tốc độ hoặc giảm mức độ ưu tiên của chuyển khoản.

Tôi đoán tôi có thể sử dụng kết hợp iptables / tc hoặc pf để đạt được điều đó, nhưng tôi tự hỏi liệu có công cụ "one-shot" nào không (như nhỏ giọt với tùy chọn --pid ^^)?


Ý bạn là "nhỏ giọt"?
halp

Chỉnh sửa: Tôi giả sử "nhỏ giọt" đã được dự định.
Steven Thứ Hai

Câu trả lời:


3

Thật không may, không có giải pháp nào như vậy cho FreeBSD. Có nhiều giải pháp như dummynet / ipfw hoặc altq / pf được sử dụng để hạn chế sử dụng mạng dựa trên các mẫu khác nhau nhưng không phải trên pids.

Trên linux có một cách để hạn chế sử dụng mạng trên cơ sở người dùng:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

Tôi nghĩ rằng không có giải pháp nào để hạn chế việc sử dụng mạng dựa trên pid.


2
IPfw của FreeBSD cũng có thể phù hợp với lưu lượng truy cập của uid
gelraen

1

Đó là quá trình để có được các cổng mạng mà Proc đang sử dụng. Khi bạn biết cổng nào đang được sử dụng, bạn có thể sử dụng quy tắc IPTABLES để xếp hạng giới hạn các cổng này. Những bài viết này sẽ cung cấp cho bạn một ý tưởng tốt hơn: http://linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http: // wikis. sun.com/pages/viewpage.action?pageId=49906332


0

Trong Linux, thậm chí sự kết hợp giữa iptables và tc có thể là một vấn đề khó khăn, vì tùy chọn "--pid-own" đã bị loại bỏ khỏi mô-đun iptables của "chủ sở hữu" (xem ghi chú bên dưới bảng ở đây ). Trên thực tế, chỉ có sự liên kết này (gói - tiến trình) có vẻ phức tạp, trong khi chúng ta có thể dễ dàng thực hiện phần còn lại, tức là lọc và giới hạn các gói khá hiệu quả.


0

Tôi không nghĩ rằng có một giải pháp đã sẵn sàng cho việc này. Nhưng, bằng cách sử dụng các công cụ Linux tiêu chuẩn, bạn có thể hack một tập lệnh sẽ làm việc đó.

Đầu tiên, bạn có thể nhận được một danh sách tất cả các kết nối của quy trình cụ thể với lsof. Sau đó, bạn có thể tạo các chính sách xâm nhập với tc cho các kết nối đó.


0

Một cách nghiêm túc, nếu bạn làm tốt quá trình xuống +20, thì mọi thứ khác đang chạy trên hệ thống sẽ được ưu tiên và công việc sẽ được lên lịch ít thường xuyên hơn, do đó sẽ khó khăn hơn trong việc điền vào bộ đệm hoặc xử lý gói, điều này sẽ dẫn đến một số TCP tiết lưu. Nó sẽ rời rạc, nhưng có thể giúp đủ.

# renice 20 -p $pid

1
Đây là một cách rất cố gắng để kiểm soát băng thông và thực sự sẽ chỉ hoạt động nếu hệ thống được tải rất nhiều - Trên một hệ thống nhàn rỗi, một quá trình được đổi tên thành -20 vẫn sẽ nhận được trên CPU như mọi khi nó muốn.
voretaq7

Đúng, nhưng nếu đây không phải là băng thông được chia sẻ với các máy tính cục bộ khác, thì nếu máy không hoạt động, bạn hầu như không quan tâm nếu quá trình này có được tất cả băng thông. Chỉ khi có một quá trình khác cố gắng sử dụng băng thông thì nó mới quan trọng. Chúng tôi có thể thu thập các định nghĩa khác nhau về "tải rất nặng" - nếu có một quá trình khác đang cố gắng chạy, nó sẽ được ưu tiên và vì vậy nếu trung bình tải là> = 1 mỗi lõi, điều này có thể giúp ích. Tôi đã lưu ý rằng nó thô nhưng nếu nó là công cụ có sẵn duy nhất (FreeBSD) thì ít nhất nó cũng đáng để thử.
Phil P
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.