2012-04-16 24 views
8

Có cách nào hiệu quả để hạn chế băng thông của một quá trình java nhất định không?hạn chế băng thông mạng của một quá trình java

Tôi quen thuộc với các giải pháp như trickle giới hạn băng thông của một quá trình nhất định trên thời gian chạy

sudo trickle -s -d 1024 /path/to/app.sh 

Nhưng khi giao dịch với java xử lý nó làm cho nó trở thành một thách thức vì các ứng dụng khởi tạo một JVM hoặc trong một số trường hợp dịch vụ WRAPPER khởi tạo JVM - điều đó có nghĩa là các giải pháp như 'nhỏ giọt' sẽ không hoạt động.

Tôi có thể thử và giới hạn (sử dụng trickle) toàn bộ quá trình java (bằng cách gói/rối tung lên với /usr/bin/java s.link) - UGLY. Có ai biết giải pháp tốt hơn để hạn chế băng thông của quá trình java (JVM) không?

Cảm ơn!

+2

Kiểm tra xem điều này có sử dụng bất kỳ http://stackoverflow.com/questions/3246345/making-a-reliable-web-service-unreliable-but-in-a-controlled-way/3247133#3247133 hay không – Kennet

Trả lời

3

Rất tiếc, tôi không nghĩ rằng mẹo nhỏ có thể thực hiện được. Tôi có vấn đề tương tự và tôi đã giải quyết nó thông qua điều chỉnh băng thông trên một cổng cụ thể. Ví dụ, ứng dụng của bạn sẽ mở cổng 34567 để giao tiếp, sau đó bạn có thể áp dụng cài đặt tường lửa và điều tiết nó xuống.

Trên một mac Tôi đang sử dụng "ipfw", ví dụ:

sudo ipfw pipe 1 config bw 5KByte/s 
sudo ipfw add 2 pipe 1 src-port 6666 

Trên Linux Tôi đang sử dụng "tc", ví dụ & nguồn: http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/

Là một giải pháp cuối cùng, bạn có thể tạo bash tập lệnh theo dõi các quy trình và chọn các quy trình bạn cần và đẩy điều chỉnh cổng trên đó.

0

Câu hỏi không thực sự rõ ràng. Bạn có quyền kiểm soát mã Java không? Nếu không, bạn có phải là Quản trị hệ thống không?

Nếu bạn đang sử dụng mã Java, bạn có thể sử dụng mô hình Socket và sau đó giới hạn từng kết nối socket bằng cách sử dụng phương pháp sau: setPerformancePreferences (int connectionTime, int latency, int bandwidth). Trong trường hợp khác, khả năng giới hạn băng thông phụ thuộc vào hệ điều hành và cách các ứng dụng Java được thực hiện.

Các vấn đề liên quan