当前位置: 首页 > 知识库问答 >
问题:

带死锁的条带池中可能出现的饥饿-Apache Ignite

谭正谊
2023-03-14

我有一个关于Apache Ignite的问题。我的测试是用一个Ignite服务器(用java编写,使用连续查询来接收更改变量的通知)和一个Ignite客户机(用.NET编写,使用putAll方法发送每50毫秒变化一次的1000个变量的通知)完成的。每个putAll同时发送大约350个变量。我收到的错误是:

2017-07-11 09:56:33,491[警告][网格-超时-工人-#19%null%]G-条纹池可能会饿死。线程名:sys-stripe-9-#10%null%queue:[消息闭包[msg=gridiomessage[plc=2,topic=topic_cache,topicord=8,ordered=false,timeout=0,skipontimeout=false,msg=gridnearatomicfullupdaterequest[keys=[KeyCacheObjectImpl[part=117,val=null,hasvalbytes=true],KeyCacheObjectImpl[part=670,val=null,GridNearAtomicAbstractUpdateRequest[res=null,flags=keepbinary]]]]死锁:true已完成:4941线程[name=“sys-stripe-9-#10%null%”,id=22,state=blocked,blockcnt=6,waitcnt=4889]锁[object=o.a.i.i.processors.cache.distributid.dht.atomic.griddhtatomiccacheentry@541d822b,在O.A.I.I.processors.cache.distributed.dht.atomic.griddhtatomiccache.lockentries(griddhtatomiccache.java:2815)在O.A.I.I.processors.cache.dist在O.a.i.i.processors.cache.distribute.dht.distribute.griddHtatomiccache.updateAllAsyncInternal0(GriddHtatomiccache.java:1741)在O.a.i.i.processors.cache.distribute.dht.atomic.updateAllAsyncInternal(GriddHtatomiccache.java:1630)在在O.a.i.i.processors.cache.distributed.dht.atomic.griddHtatomiccache$6访问$400(GriddHtatomiccache.java:127)。在O.a.i.i.processors.cache.distributed.dht.atomic.griddHtatomiccache$6访问(griddHtatomiccache.java:282)。在O.a.i.i.processors.cache.distributed.dht.atomic.griddHtatomiccache$6访问在O.A.I.I.processors.cache.gridcacheiomanager.handleMessage(gridcacheiomanager.java:308)在O.A.I.I.processors.cache.gridcacheiomanager.access$000(网格)在O.A.I.I.processors.cache.gridcacheioManager.java:100),O.A.I.I.Managers.Communication.GridioManager.InvokeListener(GridcacheioManager.java:253),O.A.I.I.Managers.Communication.GridioManager.InvokeListener(GridioManager.java:1257),O.A.I.I.Managers.Communication.GridioManager.ProcessRegularMessage0(GridioManager.java:885)在diomanager.java:802)在o.a.i.i.util.stripedexecutor$stripe.run(stripedexecutor.java:483)在java.lang.thread.run(thread.java:748)

共有1个答案

谯和煦
2023-03-14

在将集合应用于putAll之前,对相同条目进行不同顺序的批处理操作可能会导致死锁。

 类似资料:
  • 这是Geeksforgeeks使用信号量解决用餐哲学家问题的方法: https://www.geeksforgeeks.org/dining-philosopher-problem-using-semaphores/ 这个代码死锁活锁和饥饿的概率很低,我想改变它,它将有死锁,活锁或饥饿的概率很高,我怎么做? 此外,我如何确保这个解决方案不会有任何这些问题100%(如果可能的话)

  • 主要内容:死锁,活锁,饥饿,总结本节我们来介绍一下死锁、活锁和饥饿这三个概念。 死锁 死锁是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁发生的条件有如下几种: 1) 互斥条件 线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到该资源

  • 尝试从线程通知时出现死锁。 以下是我的MCVE: 如果使用,则每次尝试都要编写,这里没有问题。 如果使用循环,我会看到正在编写几次尝试,然后在某个时刻,我会得到一个死锁,等待最终永远不会结束: 我在创建线程之前锁定互斥体 则线程无法在到达之前通知(然后解锁互斥体) 在循环中,如果出现超时,重新锁定互斥体,因此无法执行notifice,则打印“Witting...”并且当我们再次准备好接收通知时释放

  • 问题内容: 该代码实际上是从Java并发中获取的,根据作者的说法,这里发生了“ ThreadStarvtionDeadlock”。请帮我找到ThreadStarvationDeadlock在这里和哪里发生的情况吗?提前致谢。 问题答案: 死锁和饥饿发生在以下行: 怎么样? 如果我们在程序中添加一些额外的代码,它将发生。可能是这样的: 导致死锁的步骤: 通过实现的类将任务提交给渲染页面。 开始在单独

  • 问题内容: 我对Java编程真的很陌生,因此如果这听起来像一个愚蠢的问题,我会提前道歉。 我正在尝试构建一个用普通C语言编写的简单应用程序,该应用程序必须创建一个,然后通过加载基于的Java代码来创建一个新窗口。 遵循本技术说明,我了解到仅在Mac OSX中,必须从不同于主线程的线程中调用JavaVM,以便能够基于AWT创建GUI。 因此,在C应用程序的功能中,我创建了一个新线程,该线程执行从ja

  • 问题内容: 一个 线程死锁饥饿 如果池中的所有线程都在等待在同一池中,以完成队列任务发生在一个正常的线程池。 通过从调用内部的其他线程中窃取工作来避免此问题,而不仅仅是等待。例如: 但是,使用到的接口时,似乎不会发生窃取工作的情况。例如: 粗略地看一下的实现,所有常规API都是使用s 实现的,因此我不确定为什么会发生死锁。 问题答案: 您几乎要回答自己的问题。解决方案是声明“ 通过从调用内部的其他