我使用Terracotta Enterprise Ehcache和Java应用程序,但在当天的某些时候,Terracotta开始花费太多时间来回答put / get请求,有时会锁定客户端的线程并启动异常。
我的基础架构由5个JBoss服务器6.2.0和另一个集成4个Terracotta Enterprise Ehcache 3.7.5的集群组成,它存储了大量数据。
该应用程序每天大约有1000万次访问Terracotta Ehcache。
最初我使用了标准,但是,当问题开始时,我改变了一切只使用id搜索。
我试图更改DGC间隔,让它更频繁地运行,甚至每天运行一次,但它没有变得更好。
我从持久模式永久存储开始,并尝试更改为临时交换,但问题仍在继续。
尝试将Terracotta群集更改为使用2台活动计算机和2个活动计算机或4个活动计划。
试图将我的缓存配置为永恒的真假。
我的所有缓存都是不间断的,我尝试将timeoutBehavior用作例外或noop。
基本上我的努力似乎没有产生任何重大变化,并且兵马俑继续进入这个状态,它不能再回答这些要求了。
现在唯一可以解决问题的是#34;问题是重新启动所有客户端。
有没有人使用Terracotta有类似的情况,有这种吞吐量?现在想去哪里的想法?
答案 0 :(得分:0)
是的,我在terracota群集设置上面临类似的线程争用问题。奴隶请求get / put用于花费时间,并且线程转储显示锁定是主要原因。我不记得细节,因为它超过4-6个月。我有两个选择:
我首先尝试使用RMI复制,然后使用JGroups。基于RMI的方法运行良好并且非常稳定,因此我决定转向基于RMI的复制,ehcache提供OOTB。我的设置是使用ehcache作为基于hibernate的JPA的缓存提供程序,RMI absed解决方案非常有效。它非常智能,可以看到群集中的其他服务器何时出现故障以及何时出现故障。复制是异步和透明的。由于第二种方法运作良好,我没有尝试第一种方法。