[hannel,192.168.0.46:40014] 15:08:03,642 - ERROR - org.jgroups.protocols.UDP - failed sending message to null (61 bytes)
java.lang.Exception: dest=/225.1.2.46:30446 (64 bytes)
at org.jgroups.protocols.UDP._send(UDP.java:333)
at org.jgroups.protocols.UDP.sendToAllMembers(UDP.java:283)
at org.jgroups.protocols.TP.doSend(TP.java:1327)
at org.jgroups.protocols.TP.send(TP.java:1317)
at org.jgroups.protocols.TP.down(TP.java:1038)
at org.jgroups.protocols.PING.sendMcastDiscoveryRequest(PING.java:220)
at org.jgroups.protocols.PING.sendGetMembersRequest(PING.java:214)
at org.jgroups.protocols.Discovery$PingSenderTask$1.run(Discovery.java:385)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.InterruptedIOException: operation interrupted
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
at org.jgroups.protocols.UDP._send(UDP.java:324)
... 16 more
Run Code Online (Sandbox Code Playgroud)
这是在服务器上进行负载测试期间发生的.我应该担心吗?除了在日志中获取该消息之外,一切似乎都正常.
我目前的jgroups配置有问题,导致数千条消息卡在NAKACK.xmit_table中.实际上所有这些似乎最终都在xmit_table中,而几个小时后的另一个转储表明它们从未打算离开...
这是协议栈配置
UDP(bind_addr=xxx.xxx.xxx.114;
bind_interface=bond0;
ip_mcast=true;ip_ttl=64;
loopback=false;
mcast_addr=228.1.2.80;mcast_port=45589;
mcast_recv_buf_size=80000;
mcast_send_buf_size=150000;
ucast_recv_buf_size=80000;
ucast_send_buf_size=150000):
PING(num_initial_members=3;timeout=2000):
MERGE2(max_interval=20000;min_interval=10000):
FD_SOCK:
FD(max_tries=5;shun=true;timeout=10000):
VERIFY_SUSPECT(timeout=1500):
pbcast.NAKACK(discard_delivered_msgs=true;gc_lag=50;retransmit_timeout=600,1200,2400,4800;use_mcast_xmit=true):
pbcast.STABLE(desired_avg_gossip=20000;max_bytes=400000;stability_delay=1000):UNICAST(timeout=600,1200,2400):
FRAG(frag_size=8192):pbcast.GMS(join_timeout=5000;print_local_addr=true;shun=true):
pbcast.STATE_TRANSFER
Run Code Online (Sandbox Code Playgroud)
启动消息......
2010-03-01 23:40:05,358 INFO [org.jboss.cache.TreeCache] viewAccepted(): [xxx.xxx.xxx.35:51723|17] [xxx.xxx.xxx.35:51723, xxx.xxx.xxx.36:53088, xxx.xxx.xxx.115:32781, xxx.xxx.xxx.114:32934]
2010-03-01 23:40:05,363 INFO [org.jboss.cache.TreeCache] TreeCache local address is 10.35.191.114:32934
2010-03-01 23:40:05,393 INFO [org.jboss.cache.TreeCache] received the state (size=32768 bytes)
2010-03-01 23:40:05,509 INFO [org.jboss.cache.TreeCache] state was retrieved successfully (in 146 milliseconds)
Run Code Online (Sandbox Code Playgroud)
...表示到目前为止一切都很好.
设置为警告级别的日志并不表示除了某种情况之外出现了问题
2010-03-03 09:59:01,354 ERROR [org.jgroups.blocks.NotificationBus] exception=java.lang.IllegalArgumentException: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
我猜的是不相关的,因为早在没有内存记忆问题的情况下就已经看到了它.
我一直在挖掘其中一台机器的两个内存转储器以找到奇怪的东西,但到目前为止还没有.除了可能来自不同协议的一些统计数据
UDP有
num_bytes_sent 53617832
num_bytes_received 679220174
num_messages_sent 99524
num_messages_received 99522
Run Code Online (Sandbox Code Playgroud)
虽然NAKACK有...... …
我正在寻找一种方法来强制JGroups使用特定的服务器作为协调器,如果该服务器不存在,则选择一个新的协调器,直到指定的协调器重新加入群集并接管为协调器.
在这种情况下,我们通过协调器监听主题以获取更新来向集群推送一些信息,但是获取和处理这些更新可能是资源密集型的,因此我们不希望它向外界提供任何服务.因此,在集群前面的负载均衡器中,我们将其设置为不发送给协调器.但是因为协调器是随机选出的,所以我们基本上需要关闭集群,直到只有一台机器在那里,然后重新启动集群的其余部分.
基本上,我有一个主节点,用于在工作节点之间分配任务。工作人员的数量可能会发生变化,这意味着工作人员无法在服务器端进行硬编码。Master向队列提交一个任务,其中一个worker接收该任务,处理它并返回结果。最关键的方面是低延迟。工作节点上的典型处理时间约为 100-300 毫秒,这意味着消息传递系统不应给处理时间增加明显的延迟。
目前我正在研究请求-响应 JMS 模式。这意味着master将任务提交到共享队列,worker将从队列中取出任务并将结果提交到主节点监听的另一个队列。主人会将响应与请求关联起来。
恐怕JMS可能会给系统带来延迟,这是不可接受的。也许我应该看看其他解决方案?比如 RabbitMQ、JGroups 还是 ZooKeeper?
如果 JMS 适合这里,您能推荐最快的 JMS 代理吗?目前我正在研究ActiveMQ
该解决方案的另一项要求是它应该能够在云端工作
在尝试在亚马逊的64位Linux AMI上运行的Jgroups 3.1.0-FINAL上设置EC2(大型实例)上的Infinispan时,我们一直看到不一致的网络故障.空缓存启动正常并且似乎工作了一段时间但是一旦缓存已满,新服务器获得同步会导致缓存锁定.
我们决定推出自己的缓存,但看到大致相同的行为.在同步期间正在交换10兆字节但它们没有被淹没.在应用程序级别有一个来回数据 - > ack对话,但看起来有些消息传递永远不会到达远程.
在查看UNICAST跟踪日志记录时,我看到以下内容:
# my application starts a cache refresh operation
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] DEBUG c.m.e.q.c.l.DistributedMapManager - i-f6a9d986: from i-d2e29fa2: search:REFRESH
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] INFO c.m.e.q.c.l.DistributedMapRequest - starting REFRESH from i-d2e29fa2 for map search, map-size 62373
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] DEBUG c.m.e.q.c.l.DistributedMapManager - i-f6a9d986: to i-d2e29fa2: search:PUT_MANY, 50 keyValues
# transmits a block of 50 values to the remote but this never seems to get there
01:02:12.004 [Incoming-1,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> DATA(i-d2e29fa2: #11, conn_id=10)
# …Run Code Online (Sandbox Code Playgroud) 来自ehcache 2.9的这篇文档说它将支持RMI,JGroups和JMS.但是,很明显,ehcache-2.9 JAR中的API已经更改,文档也不是最新的.在我得到下面的错误后,仔细看看它的EhCache ClassLoaderUtils确认这个方法(getStandardClassLoader())确实不存在.
我正在寻找关于如何解决这个问题的好主意,所以我可以在ehcache 2.9中使用JGroups复制.
我正在使用最新的ehcache-jgroupsreplication maven依赖:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-jgroupsreplication</artifactId>
<version>1.7</version>
</dependency>
Caused by: net.sf.ehcache.CacheException: java.lang.NoSuchMethodError: net.sf.ehcache.util.ClassLoaderUtil.getStandardClassLoader()Ljava/lang/ClassLoader;
at net.sf.ehcache.CacheManager.init(CacheManager.java:426)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:270)
at org.springframework.cache.ehcache.EhCacheManagerFactoryBean.afterPropertiesSet(EhCacheManagerFactoryBean.java:157)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 39 more
Caused by: java.lang.NoSuchMethodError: net.sf.ehcache.util.ClassLoaderUtil.getStandardClassLoader()Ljava/lang/ClassLoader;
at net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory.createCachePeerProvider(JGroupsCacheManagerPeerProviderFactory.java:61)
at net.sf.ehcache.config.ConfigurationHelper.createCachePeerProviders(ConfigurationHelper.java:136)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:795)
at net.sf.ehcache.CacheManager.doInit(CacheManager.java:471)
at net.sf.ehcache.CacheManager.init(CacheManager.java:395)
... 43 more
Run Code Online (Sandbox Code Playgroud) 我是Infinispan的新手,我正在使用Infinispan 8.1。我只是想获得有关此ISPN000313错误代码的一些知识。我已经对此错误代码进行了大量研究,但没有任何帮助我理解它。
我还想知道这个错误什么时候会发生,为什么会发生以及如何解决这个错误。
我已经看到了这样一个问题:两个独立的Java桌面应用程序之间的通信(答案:JGroups),我正在考虑用JavaGroups或直接RMI实现某些东西,但速度至关重要.我不会发送大量数据(MIDI消息的内容,每个3个字节,不过每三毫秒说两个消息),这将全部在同一台机器上.认为同一台物理机上的RMI/JGroups会慢吗?
(我的想法是我承受不起超过1毫秒的延迟,因为我已经有了一些,但我不确定如何在这种情况下最好地谈论速度.)
我想我真正的问题是:Java中的interspp通信是否有任何选项可以通过比TCP/IP更快的速度?我的意思是已经用Java实现的东西,而不是我需要实现的JNI可能性:)
我知道,不要尽早优化所有这些,但也比抱歉更安全.
使用 JGroups 时,通过 Infinispan 等组件,可以配置 JGroups 将使用的端口和地址。
http://www.jgroups.org/manual/html/user-advanced.html
Run Code Online (Sandbox Code Playgroud)
例如:
<UDP
mcast_addr="${jgroups.udp.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.udp.mcast_port:46655}"
...
Run Code Online (Sandbox Code Playgroud)
但这是让我困惑的地方。集群的所有成员如何都使用相同的端口 addr?
我原以为每个成员都有自己的端口,并且必须知道它需要与之交谈的其他成员的端口(和地址)?
谢谢
我正在玩一个基本的 infinispan 集群,但遇到了一个令人费解的错误。
我基本上是在实现一个共享地图,只持有一个整数
这是我的服务代码
package sandbox.infinispan.test.service;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.infinispan.Cache;
@Named("useThisOne")
@ApplicationScoped
public class CounterService implements ICounterService {
private static final String KEY = "key";
@Inject
private Cache<String, Integer> cache;
@Override
public void inc(final int amount) {
this.cache.put(KEY, Integer.valueOf(this.get() + amount));
}
@Override
public int get() {
return this.cache.computeIfAbsent(KEY, k -> Integer.valueOf(0)).intValue();
}
}
Run Code Online (Sandbox Code Playgroud)
缓存由以下内容生成:
package sandbox.infinispan.test.config;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import …Run Code Online (Sandbox Code Playgroud) jgroups ×10
java ×5
infinispan ×4
wildfly ×2
amazon-ec2 ×1
ehcache ×1
infinispan-8 ×1
jms ×1
networking ×1
performance ×1
rabbitmq ×1
rmi ×1
udp ×1