限制java进程的网络带宽

时间:2012-04-16 15:26:48

标签: java bandwidth-throttling

是否有一种有效的方法来限制某个Java进程的带宽?

我熟悉像trickle这样的解决方案来限制某个进程在运行时的带宽

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

但是当处理java进程时,它会使它更具挑战性,因为应用程序启动JVM或者在某些情况下启动JVM的WRAPPER服务 - 这意味着像'trickle'这样的解决方案不行。

我可以尝试限制(使用trickle)整个java进程(通过包装/搞乱/usr/bin/java s.link) - UGLY。 有谁知道一个更好的解决方案来限制java进程的带宽(JVM)?

谢谢!

2 个答案:

答案 0 :(得分: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/

作为最终解决方案,您可以创建bash脚本来监视进程并选择所需的进程并在其上引发端口限制。

答案 1 :(得分:0)

问题不是很清楚。 你有Java代码的控制权吗?否则,你是系统管理员吗?

如果您使用的是Java代码,则可以使用Socket范例,然后使用以下方法限制每个套接字连接: setPerformancePreferences(int connectionTime,int latency,int bandwidth)。 在另一种情况下,带宽限制功能取决于操作系统和Java应用程序的执行方式。