从昨天开始,我们的redis服务器逐渐(200MB /小时)使用更多内存,而密钥数量(330K)及其数据(132MB redis-rdb-tools)保持不变.
redis-cli信息的输出显示6.89G使用的内存?!
redis_version:2.4.10
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.6
process_id:3437
uptime_in_seconds:296453
uptime_in_days:3
lru_clock:1905188
used_cpu_sys:8605.03
used_cpu_user:1480.46
used_cpu_sys_children:1035.93
used_cpu_user_children:3504.93
connected_clients:404
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:7400076728
used_memory_human:6.89G
used_memory_rss:7186984960
used_memory_peak:7427443856
used_memory_peak_human:6.92G
mem_fragmentation_ratio:0.97
mem_allocator:jemalloc-2.2.5
loading:0
aof_enabled:0
changes_since_last_save:1672
bgsave_in_progress:0
last_save_time:1403172198
bgrewriteaof_in_progress:0
total_connections_received:3616
total_commands_processed:127741023
expired_keys:0
evicted_keys:0
keyspace_hits:18817574
keyspace_misses:8285349
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:1619791
vm_enabled:0
role:slave
master_host:***BLOCKED***
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
db0:keys=372995,expires=372995
db6:keys=68399,expires=68399
Run Code Online (Sandbox Code Playgroud)
当我们将(.net)客户端代码从BookSleeve 1.1.0.4更新到ServiceStack v3.9.71以准备升级到Redis 2.8时,问题就出现了.但是很多其他的东西都更新到了我们的会话状态存储(也是redis,但是有了ports客户端)没有显示相同的症状.
Redis内存在哪里?我该如何解决它的使用问题?
编辑:我刚刚重新启动此实例并且内存返回到350M并且现在再次攀升.前10个最大的对象仍然是相同的大小,nr 1的范围从100K到25M.密钥的数量已降至270K(之前为330K).
我的目标是在Redis服务器上实现大约80%的CPU使用率,这可以使我们的后端服务器设计受益.
使用Redis本身的基准测试时,很容易达到大约100%的CPU使用率:
$ redis-benchmark -h 192.168.1.6 -n 1000000 -c 50
Run Code Online (Sandbox Code Playgroud)
在此基准测试中,我们分配了50个客户端,以便在我们的redis服务器上推送1,000,000个请求(192.168.1.6)
但是在使用其他一些客户端工具(例如redis-lua或webdis)时,CPU使用率最低不到60%.
我在webdis和reids -lua中浏览了一些代码.webdis依赖于hired, redis-lua在Lua中实现,它基于socket(lua-socket).这些油脂是否会影响检测结果?
我还在redis-benchmark中浏览了一些代码,这是基准测试的主要工作redis-benchmark,似乎redis-benchmark使用了Redis中的代码,而我的测试客户端(webdis和redis-lua)则没有.
目前我的客户有两个选择,使用redis-lua或者像webdis一样,但是这两个没有很好地利用Redis(不到60%),还有更多的选择吗?或者除了redis-benchmark本身之外如何在redis-server上做好用 ?
我们在我们的应用程序中使用redis来获取某些数据,这非常棒.我注意到这个redis-server过程偶尔会出现cpu和内存峰值.

这是我们的生产和登台环境中的Giraffe仪表板.分段显然不那么繁忙,但通常生产并不是非常繁忙......
这似乎与后台保存有关,但与所有这些都无关.只有极少数人创造了这种飙升.也许所有人都这样做了,但它只能达到测量分辨率(有些根本没有在我们的内存/ CPU监控周期中捕获).我不完全确定.
我仍然想知道这是否是预期的/正常的.我们没有发现任何问题,但我想保持安全.如果我们的产品有更多的流量/活动,我们是否会看到更多这样的高峰?
更新:
redis日志文件在秒杀时
[18588] 05 May 11:42:51.004 * 10 changes in 300 seconds. Saving...
[18588] 05 May 11:42:51.258 * Background saving started by pid 32712
[32712] 05 May 11:43:00.511 * DB saved on disk
[32712] 05 May 11:43:00.549 * RDB: 1 MB of memory used by copy-on-write
[18588] 05 May 11:43:00.629 * Background saving terminated with success
Run Code Online (Sandbox Code Playgroud)