信息 [HintsDispatcher:416] 2024-02-12 01:42:41,180 NoSpamLogger.java:91 - 达到最大内存使用量 (536870912),无法分配 1048576 块
#我们在日志中获取上述信息。此外,我们还面临延迟警报(条件:5 分钟内超过 2 秒)。延迟和日志中的此信息之间有任何关系吗?
无论如何,增加 file_cache_size_in_mb 可能会有所帮助,或者条件似乎太紧张,我们可以扩展它(例如 5 分钟跨度中的 5 秒)。到目前为止,还没有关于应用程序端延迟问题的投诉。
您共享的消息与块缓存分配失败有关,块缓存作为 Cassandra 原生页面缓存在内存中存储 SSTable 块。
虽然它不是直接关注的问题,但它与读取延迟间接相关,但与写入延迟无关 - 块缓存的目标是通过允许 Cassandra 从内存堆外而不是从磁盘读取数据块来加速读取,这通常更快 - 因此每次您看到此消息时,您都错过了通过从内存读取数据来加速读取请求的机会。
如果您经常看到您共享的消息,则意味着节点无法以与读取请求要求在其中分配新数据相同的速率连续释放块缓存中的空间。换句话说,增加您所考虑的块缓存大小可能会有所帮助,但仅限于您的大小等于或大于超出节点重新分配能力的正在读取的热数据量,如果客户端导致密集的阅读时间。这需要一些尝试和错误才能得到正确的结果。
如果写入延迟也受到影响,我会看看其他地方。对于写入中的高延迟,我首先要考虑的是垃圾收集活动、提交日志驱动器中的 iowait 以及 CPU 利用率,但此类问题可能来自多个不同的来源。