使能内存超分
- 为Redis配置超分策略命令格式如下。
ubsectl change process-mem (-p <pid> | -n <name>) -s <size> -r <remote-ratio>
表1 参数说明 参数
说明
-p, --pid
目标进程PID,范围1~4194304。与--name互斥,必须二选一。
-n, --name
目标进程名(comm),最长15字符,仅含字母/数字/点/冒号/下划线/连字符。与--pid互斥,必须二选一。按进程名配置时,后续新启动的同名进程会被自动发现并纳管。
-s, --size
进程期望最大内存大小,范围128M到32G,支持单位B/K/M/G(二进制),最多两位小数(如512M、1G、1.5G)。
-r, --remote-ratio
远端内存占比上限,范围0.0到1.0,最多两位小数。配置为0.0时该进程不参与远端借用。
以下以controller节点7001实例为例配置内存超分。如果按PID配置使用如下命令。
- -p与-n必须且只能指定其一。
- 按PID配置时进程必须存在;按进程名配置时,后续新启动的同名进程会被自动发现并纳管。
- 若Redis以root用户运行且filter_root_process=true(默认),按PID配置会被拒绝。需将filter_root_process设为false后重启UBSE,或改用非root用户运行Redis。
- 单个进程的可迁移上限 = 进程实际内存占用 × remote-ratio。该值需大于等于一个迁移块(默认128MB),否则进程无法借出远端内存。
ubsectl change process-mem -p $pid -r 0.5 -s 128M
如果按进程名配置则使用以下命令:
ubsectl change process-mem -n redis-server -s 128M -r 0.5
这里为Redis进程期望最大内存规模为128M,远端内存占比上限为50%,即允许将最多50%的内存迁移到远端NUMA。当本地NUMA总空闲内存低于pressing_free_threshold(默认15GB)时,系统自动借用远端内存并迁移Redis页面。当本地空闲内存持续回升(观测窗口最小值高于pressing_free_threshold)时,自动迁回并归还远端内存。
- 执行以下命令查询已配置的纳管进程。
ubsectl display process-mem -t config
执行以下命令查询当前实际纳管(匹配到)的进程明细。
ubsectl display process-mem -t proc_detail
输出以表格回显,列为PID、Name、Size、RemoteRatio。config回显所有持久化的纳管配置(按PID配置的Name显示为N/A);proc_detail回显当前真正纳管的进程(按PID配置命中时Name固定为N/A,否则显示实际匹配的配置名)。
- 查询7001实例负责的Slot,如图表示7001负责“0-5460”的Slot。
redis-cli -h 192.168.100.100 -p 7001 cluster nodes

执行以下命令验证落到7001实例的Hash Tag,这里得到TAG=tag0 SLOT=49。
for i in $(seq 0 10); do slot=$(redis-cli \ -h 192.168.100.100 \ -p 7001 \ cluster keyslot "{tag${i}}:test" 2>/dev/null) if [ "${slot}" -ge 0 ] && [ "${slot}" -le 5460 ]; then echo "TAG=tag${i} SLOT=${slot}" break fi done这里使用tag0构造可以落到7001实例的Hash Tag,执行以下命令,逐步写入1GB数据。for i in $(seq 1 1000000) do echo "SET {tag0}:key_${i} $(printf '%01024d' 1)" done | redis-cli \ -h 192.168.100.100 \ -p 7001 \ --pipe - 同时执行以下命令监测进程使用情况,可观测到内存使用逐步增加。
watch -n 1 "grep -E 'VmRSS|VmSize' /proc/$pid/status"

- 当监测到VmRSS超过期望值即102.4MB时,查看确认是否触发内存超分机制,健康状态下应能观察到借用成功和迁出相关记录。
grep -E '709889|Memory Borrow|MigrateOut|needBorrow|remote memory|fault|timeout' /var/log/ubse/process_mem.log | tail -n 200

- 查询节点内存借入信息命令格式如下。
ubsectl display memory -t node_borrow
查询借用账本命令格式如下。ubsectl display memory -t borrow_detail [-bt <type>] [-n <name>]
表2 输入参数 字段名
字段描述
字段取值
-bt,--borrow-type
可选,根据借用类型过滤
可选值:[ numa | fd | share ]
-n,--name
可选,根据内存名过滤各个节点、各个类型的同名内存都会显示
字符串,长度为1~47,仅可包括大小写字母、数字、"."、":"、"-"以及"_"
例如执行以下命令,如下回显信息表明:controller节点已经从controller1节点的NUMA 1(236)成功借入总计256 MiB的NUMA内存;这两笔借用由PID 709889的ProcessMem管理流程创建。该进程内存超分已经成功生效。ubsectl display memory -t node_borrow ubsectl display memory -t borrow_detail -bt numa

- (可选)执行以下命令取消进程纳管。取消前会自动执行迁回与归还,清理借用内存。
ubsectl remove process-mem -p <pid> ubse-cli remove process-mem -n <name>