限制Java进程的网络带宽。

9

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

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

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

但是,当处理Java进程时,它会更具挑战性,因为应用程序启动一个JVM或在某些情况下启动一个WRAPPER服务,该服务启动一个JVM - 这意味着像'trickle'这样的解决方案将不起作用。
我可以尝试限制整个Java进程(通过包装/捣乱/usr/bin/java s.link),这很丑陋。是否有人知道限制Java进程(JVM)带宽的更好方法?
谢谢!

2
检查这是否有用 https://dev59.com/uk_Sa4cB1Zd3GeqP8w-3#3247133 - Kennet
2个回答

3

很抱歉,我认为trickle无法解决这个问题。

我曾经遇到过类似的问题,我通过限制特定端口的带宽来解决它。例如,您的应用程序打开了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脚本。

0

问题并不是很清楚。 你掌控Java代码吗?否则,你是系统管理员吗?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接