我搜索了很多关于这个话题的内容。
sysctl.conf的
net.core.rmem_max = 52508000
net.core.rmem_default = 26265600
net.ipv4.udp_mem = 102400 26265600 52508000
net.core.netdev_max_backlog = 65536 net.ipv4.route.flush = 1
我在Windows中进行了测试,试图在300秒内发送100msg / sec @ 256 kbps的速率,并且没有通过Localhost丢失数据包。
尝试Linux throgh Localhost片段256kbs在4 msg的65507字节,125000~msg发布120000~收到4%的数据包丢失。
在2个子网之间尝试我得到了可怕的结果,发布125000~并接收40000~。
我的机器:1 GB以太网,32核,32 GB RAM内核2.6.32-358.el6.x86_64
我的应用程序设计有10个线程,从特定的IP发送到10个端口。
Mule中的我的UDP连接器:
<udp:connector name="udpConnector" timeout="0" validateConnections="false" receiveBufferSize="26265600" sendBufferSize="26275600" broadcast="true" keepSendSocketOpen="true" doc:name="udpConnector"/>
也许我忘了设置或我的Mule UDP pararms是错误的,但我无法用一台好机器解释这个。
有人可以照亮我吗?很多thnx,TCP不是一个选项^^
//sendData = new byte[65507];
tim = 300;
delay = tim * 1000;
setmsgSec(40);
do{
for(int i=0; i<=msgSec ;i++)
{
ds.send(dp[3]);
cont++;
setCont(cont);
setRate(cont);
setAvgBytes(sendata[3].length);
}
Thread.sleep(1000);
tim = tim - 1;
delay = delay - 1000;
}while (delay != 0);
setCont(cont);
答案 0 :(得分:0)
问题解决了。
解决方案:为每台机器上的缓冲区设置相同的值,1GB以太网,32核心和1。 32G RAM和突发200条消息256kbps这个值就足够了。
kernel.threads-max = 2048
net.core.optmem_max = 16777216
net.core.rmem_default = 2620280
net.core.rmem_max = 16777216
net.core.wmem_default = 2620280
net.core.wmem_max = 16777216**
我使用性能成本低的log4j.properties:
log4j.rootLogger=INFO, default.out
# System.out.println appender for all classes
log4j.appender.default.out=org.apache.log4j.ConsoleAppender
log4j.appender.default.out.threshold=INFO
log4j.appender.default.out.layout=org.apache.log4j.PatternLayout
log4j.appender.default.out.layout.ConversionPattern=%m%n