【发布时间】:2022-07-08 08:06:36
【问题描述】:
在我们的项目中,我们使用了一个总内存为 4 GB 的 Redis 实例(托管在 GCP 上),其中目前仅使用了 2 GB。总连接数限制为 1000。几天前,我们在从 Redis 缓存读取时发现了一个意外错误(持续了几分钟)-“dial tcp xx.xx.xx.xx:6379: socket: too many open files”
现在,我检查了 Redis 的 CPU 使用率和内存使用率都没有激增,redis 实例也没有出现故障。几分钟后,该错误自动消失。虽然看起来这个错误是指同时打开的大量连接。我检查了默认连接池大小(如果有的话),我在 go-redis 库(我们正在使用)的官方文档中观察到:
为了提高性能,go-redis 会自动管理一个网络连接池(套接字)。默认情况下,每个可用 CPU 的池大小为 10 个连接,由 runtime.GOMAXPROCS 报告。在大多数情况下,这已经绰绰有余,但对其进行调整几乎没有帮助。
所以,我无法理解是什么导致了这个问题以及如何解决它(如果它将来再次出现)?有人可以帮忙吗?
【问题讨论】:
标签: go redis database-connection connection-pooling go-redis