查看Redis的内存使用情况有以下几种方式:
- 使用INFO命令查看概览
这个命令会返回Redis的各种信息,其中包含used_memory_human字段,表示当前占用的内存大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
| 172.22.0.112:6379> INFO # Server redis_version:6.2.5 redis_git_sha1:bebdf70d redis_git_dirty:0 redis_build_id:4bc59e46a4fc1fb8 redis_mode:standalone os:Linux 3.10.107-1-tlinux2-0055 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 process_id:21200 process_supervised:no run_id:de377683984710f60977b6e8eaf30926803ef647 tcp_port:3681 server_time_usec:1708331976460570 uptime_in_seconds:17534906 uptime_in_days:202 hz:10 configured_hz:10 lru_clock:13833160 executable:/data/redis/app/redis-server-ignore-60044163-3681-1-ignore/./redis-server-ignore-60044163-3681-1-ignore config_file:/data/redis/app/redis-server-ignore-60044163-3681-1-ignore/redis-server-ignore-60044163-3681-1-ignore_redis.conf io_threads_active:0
# Clients connected_clients:9 cluster_connections:6 maxclients:10000 client_recent_max_input_buffer:48 client_recent_max_output_buffer:0 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:0
# Memory used_memory:1455071680 used_memory_human:1.36G used_memory_rss:1531813888 used_memory_rss_human:1.43G used_memory_peak:1458051048 used_memory_peak_human:1.36G used_memory_peak_perc:99.80% used_memory_overhead:40273336 used_memory_startup:35313168 used_memory_dataset:1414798344 used_memory_dataset_perc:99.65% allocator_allocated:1455766936 allocator_active:1499275264 allocator_resident:1539096576 used_memory_lua:46080 used_memory_lua_human:45.00K used_memory_scripts:3648 used_memory_scripts_human:3.56K number_of_cached_scripts:4 maxmemory:4294967296 maxmemory_human:4.00G maxmemory_policy:noeviction allocator_frag_ratio:1.03 allocator_frag_bytes:43508328 allocator_rss_ratio:1.03 allocator_rss_bytes:39821312 rss_overhead_ratio:1.00 rss_overhead_bytes:-7282688 mem_fragmentation_ratio:1.05 mem_fragmentation_bytes:76744032 mem_not_counted_for_evict:0 mem_replication_backlog:1048576 mem_clients_slaves:20512 mem_clients_normal:184536 mem_aof_buffer:0 mem_allocator:jemalloc-5.1.0 active_defrag_running:0 lazyfree_pending_objects:0 lazyfreed_objects:7049
# Persistence loading:0 current_cow_size:0 current_cow_size_age:0 current_fork_perc:0.00 current_save_keys_processed:0 current_save_keys_total:0 rdb_changes_since_last_save:334236269 rdb_bgsave_in_progress:0 rdb_last_save_time:1690797080 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:495616 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 module_fork_in_progress:0 module_fork_last_cow_size:0
# Stats total_connections_received:12760750 total_commands_processed:528960677 instantaneous_ops_per_sec:68 total_net_input_bytes:23835427431 total_net_output_bytes:100375923436 instantaneous_input_kbps:2.91 instantaneous_output_kbps:5.66 rejected_connections:0 sync_full:1 sync_partial_ok:0 sync_partial_err:1 expired_keys:18205812 expired_stale_perc:0.67 expired_time_cap_reached_count:0 expire_cycle_cpu_milliseconds:366281 evicted_keys:0 keyspace_hits:52688695 keyspace_misses:214710 pubsub_channels:1 pubsub_patterns:0 latest_fork_usec:708 total_forks:1 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 tracking_total_keys:0 tracking_total_items:0 tracking_total_prefixes:0 unexpected_error_replies:0 total_error_replies:4003321 dump_payload_sanitizations:0 total_reads_processed:444189431 total_writes_processed:679330054 io_threaded_reads_processed:0 io_threaded_writes_processed:0
# Replication role:master connected_slaves:1 slave0:ip=11.72.176.30,port=3686,state=online,offset=16739810899,lag=1 master_failover_state:no-failover master_replid:b59b0eb90653f1c4c2b90094eed4079713141410 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:16739811996 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:16738763421 repl_backlog_histlen:1048576
# CPU used_cpu_sys:10135.732000 used_cpu_user:22712.672000 used_cpu_sys_children:0.000000 used_cpu_user_children:0.000000 used_cpu_sys_main_thread:6144.096000 used_cpu_user_main_thread:21580.728000
# Modules
# Errorstats errorstat_ERR:count=4003029 errorstat_NOAUTH:count=292
# Cluster cluster_enabled:0
# Keyspace db0:keys=49428,expires=17294,avg_ttl=3866358
|
Redis INFO 命令返回的这些内存使用相关字段的意思:
- used_memory: Redis实际使用的内存总量,单位字节
- used_memory_human: Redis实际使用的内存总量,字节转换成人可读格式(如1.36G)
- used_memory_rss: RSS(Resident Set Size)格式表示的Redis内存大小
- used_memory_rss_human: RSS格式内存大小的人可读格式
- used_memory_peak: 从Redis启动到现在最大使用内存量
- used_memory_peak_human:最大使用内存人可读格式
- used_memory_peak_perc: 当前使用内存占最大使用内存的百分比
- used_memory_overhead: Redis内部开销产生的内存消耗
- used_memory_startup: Redis启动时初始化占用的内存
- used_memory_dataset: key-value实际数据占用的内存
- used_memory_dataset_perc: 数据占用内存占总内存的百分比
- allocator_allocated: 分配器总共分配的内存
- allocator_active: 分配器当前可以使用的内存总量
- allocator_resident: 分配器占用的物理内存
- maxmemory: 配置的最大内存限制
- maxmemory_policy: 超过最大内存的处理策略
- 等等对象及内存碎片相关字段
所以这些内存相关字段主要用来评估和跟踪Redis实例当前内存使用情况,以及最大内存、内存碎片等配置信息。
- 使用MEMORY STATISTICS命令查看内存使用明细
这个命令会返回更详细的内存使用情况,如已分配的内存大小、内部碎片等。
MEMORY STATISTICS 命令报错,可能的原因和解决方案:
- Redis版本问题
MEMORY STATISTICS 命令从Redis 5.0版本才开始支持,如果您使用的是Redis版本低于5.0,则不支持此命令。
- 参数错误
MEMORY STATISTICS 命令不接受任何参数。请直接输入 MEMORY STATISTICS 即可。
- 连接错误
检查Redis连接是否正确,比如重连一次看看。
- 特权访问问题
MEMORY STATISTICS 命令需要具备READONLY或HIGHER权限才可以使用,普通连接可能无法调用此命令。
- 查看内存开关是否关闭
如果Redis服务器配置关闭了内存统计功能,也无法使用此命令。
解决方法:
如果都检查没问题仍然报错,可能Redis内部有问题,需要查看日志排查原因。但一般来说上述几点应该能解决MEMORY STATISTICS报错的问题。
- 使用CONFIG GET memory命令查看配置的内存限制
此命令可以查看Redis实例配置的内存限制,包括最大使用内存(maxmemory)和交换文件路径(maxmemory-policy)等设置。
- 查看Redis进程占用的内存大小
对于Linux系统,可以使用命令查看Redis进程的RSS内存使用情况:
- 使用ainfo.lua脚本详细查看每种数据结构的内存占用
这个lua脚本可以输出每种key所占用内存的详细报告。
所以一般情况下,使用INFO或者MEMORY STATISTICS即可查看Redis目前的内存使用情况。如果需要更详细信息,可以使用ainfo.lua脚本或者查看进程实际占用内存。
TTL DEBUG ainfo.lua 什么作用?有副作用吗
TTL DEBUG ainfo.lua 主要是用于查看Redis各种数据结构(字符串、哈希、列表等)占用内存的具体情况。
它的具体作用和特征如下:
ainfo.lua 是一个Redis内置的Lua脚本,使用 TTL DEBUG 命令执行。
该脚本会对当前数据库中的每个key进行迭代,并统计各种数据类型key所占用的内存总量。
可以得知每个key的类型、值大小、过期时间等具体信息。
对比 MEMORY STATISTICS 命令,ainfo.lua提供更细致的每种数据类型内存消耗明细。
执行时间较长,对性能有一定影响,不建议在生产环境长期运行。
运行过程中,Lua引擎会占用一定CPU和内存资源。
不会对现有key-value数据产生任何修改,只是进行内部统计和迭代,不会对Redis数据造成影响。
所以可以理解为,TTL DEBUG ainfo.lua 主要用于Debug和诊断Redis内存使用情况,提供更详细的内存统计报告。
执行后会消耗一定性能,但不会对Redis数据本身产生任何更改。一般只在需要调试Redis内存使用详情时使用,不建议长时间运行占用资源。
总体来说,它的执行对Redis数据是无副作用的,只是对性能会有一定影响。主要作用是查看各数据类型key的内存占用明细。
原文链接: https://dashen.tech/2020/02/19/Redis查看使用的内存空间大小/
版权声明: 转载请注明出处.