【发布时间】:2013-01-08 00:08:54
【问题描述】:
我正在使用带有 php-fpm 和 phpredis 驱动程序的 redis (2.6.8),并且遇到了一些 redis 延迟问题。在某些负载下,我们的应用程序对 redis 的首次请求大约需要 1-1.5 秒,redis-cli --latency 显示相同的延迟。
我已经检查过the latency guide。
- 我们在具有 Unix 套接字的同一主机上使用 redis
- slowlog 不再有条目 5 毫秒
- 我们不使用 AOF
- redis 需要大约 3.5Gb 的内存,可用的 16Gb 内存(我想不会太多)
- 我们的系统没有交换
- 没有其他进程在执行磁盘 I/O
我正在使用持久连接,连接的客户端数量从 5 到 25 不等(有时罢工到 60-80)。
当有 20 个或更多同时连接的客户端时,问题似乎开始了。
你能帮我找出问题所在吗?
更新
我调查了这个问题,似乎由于某种原因,redis 没有足够的处理器时间来正常运行。
我在网络嗅探器的帮助下彻底检查了 php-fpm 和 redis 之间的通信。 Redis 通过 tcp 收到请求,但仅在一秒半后才发回响应。这显然表明问题出在 redis 内部,它无法在给定的条件下处理这么多的请求(可能是处理器饥饿,因为整个系统的处理器负载只有 50%)。
问题已通过将 redis 移至其他几乎空闲的服务器来解决。我想我们应该使用 linux scheduler 让它在同一台服务器上工作,但还没有这样做。
【问题讨论】:
-
吞吐量和平均负载是多少?
-
我如何测量它?
redis-cli info我只能看到每秒的瞬时操作 -
我使用的是 Unix 套接字而不是 TCP/IP
-
您是否更改了后台进程的赫兹设置?也许给它更多的 CPU 时间会有所帮助。