由于我们网站上的负载大量增加,redis 现在正在努力应对峰值负载,因为 redis 服务器实例的 CPU 使用率达到 100%(在八个核心之一上),导致超时。
我们已将客户端软件更新至 ServiceStack V3(来自 BookSleeve 1.1.0.4),并将 redis 服务器升级至 2.8.11(来自 2.4.x)。我选择ServiceStack是因为存在使用ServiceStack.Redis的Harbour.RedisSessionStateStore。我们之前将 AngiesList.Redis 与 BookSleeve 一起使用,但我们也体验到了 100%。
我们有八个 Redis 服务器配置为主/从树。一台服务器用于会话状态。其他的用于数据缓存。一个主设备有两个主设备/从设备,每个设备连接到两个从设备。
当服务器在 100% CPU 使用率时开始堵塞时,它们在峰值时可容纳大约 600 个客户端连接。
我们可以做些什么来提高性能?
分片和/或 StackExchange Redis 客户端(据我所知,没有可用的会话状态客户端...)。
或者可能是其他什么?会话服务器也达到 100%,并且未连接到任何其他服务器(数据和网络吞吐量很低)。
更新1:redis-cli INFO分析
这是运行 Redis 2.8 一晚后 INFO 命令的输出。
# Server
redis_version:2.8.11
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7a57b118eb75b37f
redis_mode:standalone
os:Linux 2.6.32-431.11.2.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:5843
run_id:d5bb838857d61a9673e36e5bf608fad5a588ac5c
tcp_port:6379
uptime_in_seconds:152778
uptime_in_days:1
hz:10
lru_clock:10765770
config_file:/etc/redis/6379.conf
# Clients
connected_clients:299
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:80266784
used_memory_human:76.55M
used_memory_rss:80719872
used_memory_peak:1079667208 …Run Code Online (Sandbox Code Playgroud) performance sharding redis servicestack.redis stackexchange.redis