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

Terracota Ehcache锁定客户端

景子安
2023-03-14

我将Terracotta Enterprise Ehcache与Java应用程序一起使用,但在一天中的某些时候,Terracott开始花费太多时间来响应put/get请求,有时会锁定客户端线程并启动异常。

我的基础架构由5个JBoss服务器6.2.0的集群和另一个存储大量数据的4个Terracotta Enterprise Ehcache 3.7.5的集群组成。

该应用程序每天大约1000万次访问Terracotta Ehcache。

>

  • 最初我使用标准,但是,当问题开始时,我将所有内容更改为仅使用id搜索。

    我试图改变DGC间隔,使它更频繁地运行,甚至每天只运行一次,它没有变得更好。

    我从持久化模式永久存储开始,并试图更改为仅临时交换,但问题仍然存在。

    尝试将兵马俑集群更改为与2台活动机器和2台被动或4台活动机器一起工作。

    试图将我的缓存配置为永恒的真或假。

    我所有的缓存都是不间断的,我尝试将超时行为用作异常或noop。

    基本上,我的努力似乎没有产生任何重大的变化,兵马俑继续进入这种状态,它不能再回答请求了。

    现在唯一能“解决”这个问题的方法就是重启所有的客户端。

    有没有人使用Terracotta有类似的场景,有这样的吞吐量?现在知道去哪里找了吗?

  • 共有1个答案

    施知
    2023-03-14

    是的,我在梯田集群设置上遇到了类似的线程争用问题。从站的 get/put 请求习惯于花费时间,线程转储显示锁定是主要原因。我不记得细节,因为它是4-6个月前。当时我有2个选择:

    • 创建一个自己的缓存服务器,这将是一场自定义战争,并将在下面运行ehcache,并将我自己的放置,获取,删除等操作公开为RESTendpoint。
    • 使用缓存复制,如 ehcache 提供的那样。

    我首先尝试使用RMI进行复制,然后使用JGroups。基于RMI的方法工作得非常好,而且非常稳定,所以我决定转向ehcache提供的OOTB基于RMI的复制。我的设置是使用ehcache作为基于hibernate的JPA和RMI absed解决方案的缓存提供者,效果非常好。它足够智能,可以看到集群中的其他服务器何时关闭,何时恢复。复制是异步和透明的。因为第二种方法效果很好,所以我没有尝试第一种方法。

     类似资料:
    • 问题内容: 我在这里思考:如果您有2个线程执行需要同步的FAST操作,那么非阻塞方法不是比阻塞/上下文切换方法更快/更好的方法吗? 非阻塞的意思是: while(true){如果(checkAndGetTheLock())中断;} 如果您有太多线程在锁中循环,我唯一想到的就是饥饿(CPU耗尽)。 如何平衡一种方法与另一种方法? 问题答案: 以下是 Java Concurrency in Pract

    • 我是JDBC概念的新手。我已经构建了一个 java 客户端来使用选择查询从表中读取数据。据我所知,当您执行选择查询数据库时,将应用锁定,这可能会使表发生的插入速度变速。有没有办法在不应用锁的情况下执行选择查询。我的表是 DB2 数据库。

    • 问题内容: 我正在与socket.io聊天应用程序,我想用我的自定义客户端ID,而不是默认的(,)。连接时是否有任何发送自定义标识符的方式,或仅使用某种方式来跟踪每个ID的自定义名称?谢谢! 问题答案: 您可以在服务器上创建一个数组,并在其上存储自定义对象。例如,您可以存储Socket.io创建的ID和每个客户端发送到服务器的自定义ID: 在此示例中,您需要从每个客户端调用 storeClient

    • 你好,我有一个与SAAS模型和多租户相关的问题。 据我所知,SAAS多租户应用程序意味着所有客户机的通用功能,以及一些用户界面和功能的定制。 如果我需要为一些客户进行额外的客户特定定制,我如何实现它? 我了解SalesForce的方法 至于答案,我很高兴看到你们在数据库级别的定制,后端架构,或者这个主题的任何链接方面都有经验。

    • 我看不出有什么区别。我读到了这篇文章:actual-use-of-lockinterruptbly-for-a-reentrantlock 想测试一下。代码如下: 这里是Inturrept班 控制台输出: 正如回答中提到的“这与常规锁()相同。但如果另一个线程中断,等待的线程lockInterruptbly()将抛出InterruptedException。”即使它是锁着的。lock()或lock

    • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se