Redis查看使用的内存空间大小

查看Redis的内存使用情况有以下几种方式:

  1. 使用INFO命令查看概览
1
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实例当前内存使用情况,以及最大内存、内存碎片等配置信息。



  1. 使用MEMORY STATISTICS命令查看内存使用明细
1
MEMORY STATISTICS

这个命令会返回更详细的内存使用情况,如已分配的内存大小、内部碎片等。

MEMORY STATISTICS 命令报错,可能的原因和解决方案:

  1. Redis版本问题

MEMORY STATISTICS 命令从Redis 5.0版本才开始支持,如果您使用的是Redis版本低于5.0,则不支持此命令。

  1. 参数错误

MEMORY STATISTICS 命令不接受任何参数。请直接输入 MEMORY STATISTICS 即可。

  1. 连接错误

检查Redis连接是否正确,比如重连一次看看。

  1. 特权访问问题

MEMORY STATISTICS 命令需要具备READONLY或HIGHER权限才可以使用,普通连接可能无法调用此命令。

  1. 查看内存开关是否关闭

如果Redis服务器配置关闭了内存统计功能,也无法使用此命令。

解决方法:

  • 确认Redis版本是否足够高支持MEMORY STATISTICS

  • 简单输入MEMORY STATISTICS即可,不要加参数

  • 重连一次Redis验证连接是否正常

  • 使用具有足够权限的连接试试

  • 查看配置文件是否开启内存统计功能

如果都检查没问题仍然报错,可能Redis内部有问题,需要查看日志排查原因。但一般来说上述几点应该能解决MEMORY STATISTICS报错的问题。

  1. 使用CONFIG GET memory命令查看配置的内存限制
1
CONFIG GET memory

此命令可以查看Redis实例配置的内存限制,包括最大使用内存(maxmemory)和交换文件路径(maxmemory-policy)等设置。

  1. 查看Redis进程占用的内存大小

对于Linux系统,可以使用命令查看Redis进程的RSS内存使用情况:

1
ps aux | grep redis
  1. 使用ainfo.lua脚本详细查看每种数据结构的内存占用
1
TTL DEBUG 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的内存占用明细。

文章目录