2012-04-16 56 views
8

有沒有一種有效的方法來限制某個java進程的帶寬?限制java進程的網絡帶寬

我熟悉的像trickle解決方案,以限制運行時間

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

一定過程的帶寬,但用java打交道時處理它使一個更大的挑戰,因爲應用程序啓動JVM或者在某些例如發起JVM的WRAPPER服務 - 這意味着諸如「滴流」之類的解決方案將無法工作。

我可以嘗試和限制(使用trickle)整個java進程(通過包裝/搞亂/usr/bin/java s.link) - UGLY。 有誰知道更好的解決方案來限制java進程的帶寬(JVM)?

謝謝!

+2

檢查這是否有用http://stackoverflow.com/questions/3246345/making-a-reliable-web-service-unreliable-but-in-a-controlled-way/3247133#3247133 – Kennet 2012-04-16 15:33:51

回答

3

不幸的是,我不認爲滴流可以做到這一點。 我有類似的問題,我通過在特定的端口上調節帶寬來解決它。例如,您的應用程序打開端口34567進行通信,然後您可以應用防火牆設置並將其關閉。

在Mac上,我使用 「的ipfw」,例如:

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

在Linux上,我使用 「TC」,例子&來源:http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/

作爲最後的解決方案,您可以創建慶典監視進程並選擇你需要的進程並引發端口限制的腳本。

0

這個問題並不十分清楚。 你有控制Java代碼嗎?否則,你是系統管理員嗎?

如果您正在使用,你可以使用Socket模式,然後通過限制使用以下方法每個插座連接的Java代碼:setPerformancePreferences(INT connectionTime,INT延遲,帶寬INT)。 在另一種情況下,帶寬限制能力取決於操作系統和Java應用程序的執行方式。