Java-Mule-UDP数据包丢失
关于这个话题我搜索了很多Java-Mule-UDP数据包丢失,java,linux,sockets,udp,mule,Java,Linux,Sockets,Udp,Mule,关于这个话题我搜索了很多 UDP不可靠 UDP无法发送超过64kbs或65507字节且没有标头的数据包 MTU通常为1500 sysctl.conf net.core.rmem_max=52508000 net.core.rmem_默认值=26265600 net.ipv4.udp_mem=102400 26265600 52508000 net.core.netdev_max_backlog=65536 net.ipv4.route.flush=1 我在Windows中测试了一个escena
- UDP不可靠
- UDP无法发送超过64kbs或65507字节且没有标头的数据包
- MTU通常为1500
- sysctl.conf
net.core.rmem_max=52508000
net.core.rmem_默认值=26265600
net.ipv4.udp_mem=102400 26265600 52508000
net.core.netdev_max_backlog=65536 net.ipv4.route.flush=1 我在Windows中测试了一个escenary,我尝试在300秒内以256kbps的速率发送100msg/sec,而不会通过本地主机丢失数据包
<udp:connector name="udpConnector" timeout="0" validateConnections="false" receiveBufferSize="26265600" sendBufferSize="26275600" broadcast="true" keepSendSocketOpen="true" doc:name="udpConnector"/>
也许我忘记了设置或者我的Mule UDP参数是错误的,但是我不能用一台好的机器来解释这一点
有人能照我吗?很多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);
//sendData=新字节[65507];
tim=300;
延迟=tim*1000;
setmsgSec(40);
做{
对于(int i=0;i问题已解决
解决方案:为每台机器上的缓冲区设置相同的值,对于1GB以太网、32核和32G RAM以及256kbps的200条消息的突发,这些值就足够了
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
我会对1-5层(或2-5层,取决于设备“接收缓冲区空间不足”的位置)的每个OSI层提出质疑。在任何人祈祷回答之前,你必须进一步缩小范围并进行自己的调试。除了你之外,没有人可以看到你的网络、设备和代码。好的,这是一个例子,假设有10个线程也这样做,以完成256kbps的100 msg/sec的平均值UDP笑话的问题:我没有得到一半