微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloud Memorystore Redis CPU 使用率高

如何解决Cloud Memorystore Redis CPU 使用率高

我们正在使用 Cloud Memorystore Redis 实例为我们面向互联网的关键任务应用程序添加缓存层。对 Memorystore 实例的调用总数(包括 get、set 和 key expiry 操作)约为每秒 10-15K。 cpu 利用率一直保持在 75-80% 左右,预计利用率会更高。

目前,我们使用标准服务层下的 M4 容量层。

https://cloud.google.com/memorystore/docs/redis/pricing

需要清楚地了解以下几点。

  1. M4 容量层对应多少个 cpu 内核?
  2. cpu 使用率超过 100% 真的令人担忧吗?我们预计会出现任何明显的性能问题吗?
  3. 解决由较高 cpu 利用率 (>=100%) 引起的性能问题(如果有)的选项有哪些?切换到 M5 容量层是否会解决cpu 消耗和相应问题。

我们的应用程序确实是 cpu 密集型的,我们看不到任何进一步优化应用程序的方法。期待一些有用的参考。

解决方法

解决您的问题。

1. M4容量层对应多少个CPU核心?
Cloud Memorystore for Redis 是 Google 管理的服务,这意味着 Google 可以保留运行 redis 服务的虚拟机的内部详细信息(资源)。仍然预计容量层越高,虚拟机将拥有越多的资源 (CPU)。特别是对于您的情况,添加 CPU 不会解决有关 CPU 使用率的问题,因为 redis 服务本身是 single threaded

正如您从上一个链接中看到的:

为了最大限度地提高 CPU 使用率,您可以启动多个 Redis 实例。
如果你想使用多个 CPU,你可以早点开始考虑一些分片的方法。

2. CPU 使用率超过 100% 真的很可怕吗?
是的,高 CPU 使用率令人担忧,因为它会导致连接错误或高延迟。 CPU 利用率很重要,但 Redis 实例是否足够高效以在给定的延迟下维持您的吞吐量也很重要。您可以在 CPU % 较高时使用命令 redis-cli --latency 检查 redis 延迟。

3.我们预计会出现任何明显的性能问题吗?
这真的很难说或预测,因为它取决于几个因素(客户端服务、在时间范围内运行的命令、工作量)。导致高延迟和性能问题的一些最常见原因是:

  • 客户端虚拟机或服务过载,不消耗来自 Redis 的消息:当客户端打开一个到 redis 的 TCP 连接时,redis 服务器有一个消息缓冲区要发送到该连接.如果客户端服务的 CPU 已用尽,内核没有时间接收来自 redis 的消息,那么它们就会在 redis 服务器上填满。

  • 执行的命令消耗大量 CPU:已知以下命令的处理成本可能非常高:
    EVAL/EVALSHA
    钥匙
    范围
    ZRANGE/ZREVRANGE

4.-解决由较高 CPU 利用率 (>=100%) 引起的性能问题(如果有)的选项有哪些?
这个问题主要围绕您的实现的扩展设计。由于 redis 是单线程的,降低 CPU % 的更好方法是将数据分片到多个 redis 实例中,并在其前面设置一个代理来分配负载。请查看此 link 中的 Twemproxy 部分下的图表。

5.-切换到 M5 容量层会解决高 CPU 消耗和相应问题吗?
切换到更高容量的层应该有助于暂时缓解延迟,但这称为垂直扩展,仅限于 Cloud Memorystore 提供的层。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。