首页 文章

Terracota Ehcache锁定客户端

提问于
浏览
2

我正在使用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 .

基本上我没有任何努力似乎产生任何重大变化,并且兵马俑继续进入这个状态,在那里它无法再回答这些要求 .

现在唯一似乎“解决”问题的是重启所有客户端 .

有没有人使用Terracotta有类似的情况,这种吞吐量?现在想去哪里的想法?

1 回答

  • 0

    是的,我在terracota集群设置上面临类似的线程争用问题 . 奴隶请求get / put用于花费时间,并且线程转储显示锁定是主要原因 . 我不记得细节,因为它超过4-6个月 . 我有两个选择:

    • 创建一个自己的缓存服务器,这将是一个自定义的战争,并将在下面运行ehcache并将我自己的put,get,delete等操作作为REST endpoints 公开 .

    • 使用ehcache提供的缓存复制 .

    我首先尝试使用RMI复制,然后使用JGroups . 基于RMI的方法运行良好并且非常稳定,因此我决定转向基于RMI的复制,ehcache提供OOTB . 我的设置是使用ehcache作为基于hibernate的JPA的缓存提供程序,RMI absed解决方案非常有效 . 它足够智能,可以查看集群中的其他服务器何时出现故障以及何时出现故障 . 复制是异步和透明的 . 由于第二种方法运作良好,我没有尝试第一种方法 .

相关问题