openGauss常见问题与故障处理(九)

内存不足问题定位方法
1> 数据库内存不足时,正常端口连接会失败,此时连接内存不足节点+1
2> 端口+1登录成功后查询总的内存使用视图
select * from gs_shared_memory_detail;

3> 根据上一步中查出的内存使用情况进行如下分析
①若dynamic_used_shrctx数据异常大,查询如下视图:gs_shared_memory_detail
select contextname,sum(totalsize)/1024/1024 sum,sum(freesize)/1024/1024,count(*) count from
gs_shared_memory_detail group by contextname order by sum desc limit 10;
根据查出的内存context信息,使用内存最大的context可能存在内存泄漏。

②若dynamic_used_memory数值较大,dynamic_used_shrctx数值很小,则查询如下视图:gs_session_memory_detail。
select contextname,sum(totalsize)/1024/1024 sum,sum(freesize)/1024/1024,count(*) count from
gs_shared_memory_detail group by contextname order by sum desc limit 10;
根据查出的内存context信息,看使用内存最大的context是否是常见的context,若不是则该context可能存在内存泄漏。

4> 根据上一步中确认的可能存在内存泄漏的context,通过如下视图可直接查询该context上内存申请的详细信息:
gs_get_shared_memctx_detail(text)描述:返回指定内存上下文的内存申请的详细信息,包含每一处内存申请所在的文件、行号和大小(同一文件同一行大小会做累加)。只支持查询通过pg_shared_memory_detail视图查询出来的内存上下文,入参为内存上下文名称(即pg_shared_memory_detail返回结果的contextname列)。查询该函数必须具有sysadmin权限或者monitor admin权限。
  
5> gs_get_session_memctx_detail(text)函数:返回指定内存上下文的内存申请的详细信息,包含每一处内存申请所在的文件、行号和大小(同一文件同一行大小会做累加)。仅在线程池模式下生效。且只支持查询通过
pv_session_memory_context视图查询出来的内存上下文,入参为内存上下文名称
(即pv_session_memory_context返回结果的contextname列)。查询该函数必须具有sysadmin权限或者monitoradmin权限。

6> 基本的context下的内存泄漏问题都可以用上述方法定位,如果是other_used_memory占用较大,此时则不能通过上述方法正常定位,需要使用Jemalloc自带的采用工具,收集malloc的调用和分配关系进行分析,步骤如下:
①在debug版本下,设置环境变量:
export MALLOC_CONF=prof:true,prof_final:false,prof_gdump:true,lg_prof_sample:20
其中最后的20表示每2^20B(1MB)产生一个heap文件,该值可以调,但是调大以后,虽然heap文件会减少,但也会丢失一些内存申请信息。
②重启集群,如果是集群环境,需要kill om_monitor,并手动将om_monitor进程拉起。
查看数据目录是否产生大量heap文件,如果产生,说明配置成功,否则需要重复上述步骤,直到产生heap文件。

7>
运行相关业务一段时间,取业务开始和最新的heap文件。
使用jeprof处理heap文件,生成pdf。jeprof在代码binarylibs/${platForm}/jemalloc/debug/bin下可以获取,
此外使用该二进制需要安装graphviz,可以通过yum install graphviz安装。
生成pdf的命令:
全量:jeprof -show_bytes -pdf gaussdb *.heap > out.pdf
增量:jeprof -pdf gaussdb -base=start.heap end.heap > out.pdf
根据生成的PDF分析结果
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值