2012-04-16 61 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应用程序的执行方式。