首批通过分布式安全可靠测评,为关键业务系统打造
内存诊断
更新时间:2026-05-11 19:32:25
本文介绍如何使用内存诊断功能。
背景
ODP 目前记录的内存信息有限,发生内存泄漏后难以快速定位泄露位置。因此,自 ODP V4.2.3 版本起,开发内存泄漏诊断功能帮助解决上述问题。
前提条件
使用内存泄漏诊断功能前,您需确认环境中部署的 ODP 为 V4.2.3 或之后版本。
操作步骤
使用
root@sys用户通过 ODP 代理登录 OceanBase 数据库,或使用root@proxysys用户登录 ODP详细操作可参见 配置项说明 中 查看配置项。
执行如下命令设置功能相关配置项
设置
mem_leak_check_mod_name配置项,排查内存泄漏问题时推荐配置为ALL。该配置项的详细介绍可参见 mem_leak_check_mod_name。obclient> alter proxyconfig set mem_leak_check_mod_name='ALL';设置
mem_leak_check_class_name配置项,排查内存泄漏问题时推荐配置为空。该配置项的详细介绍可参见 mem_leak_check_class_name。obclient> alter proxyconfig set mem_leak_check_class_name='';复现内存占用高的场景
查看内存占用及内存分配堆栈
obclient> show proxymemory 3\G若存在内存分配堆栈,输出如下:
*************************** 10. row *************************** mod_name: OB_CONCURRENCY_OBJ_POOL mod_type: user hold: 34,552,064 used: 33,573,536 count: 173 avg_used: 194,066 hold bytes, alloc times and backtraces(addr2line -Cfe obproxy 0xXXXX): 17097232 33 0xf13db9 0xf8994e 0xf85e1b 0xf0973f 0xf25332 0xf26867 0xef75c2 0x10aa1ba 0x10b509a 0x1e71111 0x20ff1a2 0x1e5529d 0x140a655 0xec6ae0 0xec6157 0xec6976 0xec1fa7 0xeaccdf 0xea6201 0xea5ee1 0xea36fc 0xea196e 0xea0dfe 0xe9dbc9 0x20972b1 0x207c559 0x2086a4c 0xf077be 0x7fd3d417c555 0xef6fd5 7176416 14 0xf13db9 0xf8994e 0xf85e1b 0xf0973f 0xf25a75 0xf265f8 0x2281b1e 0x2283de6 0x1dfefee 0x7fd3d55b88e1 0x1e0aed0 0x1e0b73d 0x209e3fa 0x207c546 0x2086a4c 0xf077be 0x7fd3d417c555 0xef6fd5 1319264 22 0xf13db9 0xf8994e 0xf85e1b 0xf0973f 0xf25332 0xf26867 0x10b55fa 0x1e71111 0x20ff1a2 0x1e5529d 0x140a655 0xec6ae0 0xec6157 0xec6976 0xec1fa7 0xeaccdf 0xea6201 0xea5ee1 0xea36fc 0xea196e 0xea0dfe 0xe9dbc9 0x20972b1 0x207c559 0x2086a4c 0xf077be 0x7fd3d417c555 0xef6fd5在 ODP 的安装目录下,执行 addr2line 命令查看内存分配位置,进而确定内存泄漏原因
[admin@obtest1 bin]$ addr2line -Cfe obproxy 0xf13db9 0xf8994e 0xf85e1b 0xf0973f 0xf25332 0xf26867 0xef75c2 0x10aa1ba 0x10b509a 0x1e71111 0x20ff1a2 0x1e5529d 0x140a655 0xec6ae0 0xec6157 0xec6976 0xec1fa7 0xeaccdf 0xea6201 0xea5ee1 0xea36fc 0xea196e 0xea0dfe 0xe9dbc9 0x20972b1 0x207c559 0x2086a4c 0xf077be 0x7fd3d417c555 0xef6fd5说明
内存达到告警限制(
proxy_mem_limited*80%)后,ODP 会主动打印内存占用最多的 10 条内存记录到 obproxy.log 日志中。您可通过关键字 "MEMORY LEAK CHECK (START)" 查询。内存达到 90% 限制(
proxy_mem_limited*90%)后,ODP 会关闭内存泄漏诊断功能,清理内部保存的内存分配信息,以节省内存。
相关文档
proxy_mem_limited 配置项的详细介绍可参见 proxy_mem_limited。