GaussDB others内存比较高的场景

举报
fighttingman 发表于 2022/06/25 09:54:27 2022/06/25
【摘要】 GaussDB others内存较高的几个场景

others内存高指的是pv_total_memory_detail中的others_used_memory占用比较高的内存的情况。

others内存的计算方式:

gaussdb进程占用的内存 - dynamic_used_memory- shared_used_memory- cstore_used_memory - shared_used_memory后的值。

others内存一般是内核直接通过malloc申请的内存,或者第三方库中申请的内存。

1.已知的会导致others内存高的场景

1)协同分析场景下,cn的ssl打开。该问题是由于建联过程中内存泄漏。

版本:到目前的8.1.3版本还有问题。

确认方法:

show ssl; (值为on)

select * from pg_foreign_server;

上图是没有协同分析的输出,如果有协同分析业务的话,会多出来几条记录。

规避措施:

将cn的ssl参数关闭

gs_guc set -Z coordinator -N all -I all -c "ssl=on"

设置好后,重启集群生效。

2)连接数过多导致的others内存占用高,需要清理idle状态的空闲连接。此场景others内存一般不会涨的很夸张。

确认方法:当作业都停止后,others依然过高,通过ps -T -p <pid>、gstack或gcore,获取others过高的cn或dn中的线程数量,确认线程数量超过100+。

实验室已模拟复现,在300连接时占用others内存约1.7G,1200连接时占用others内存约5.7G。

规避措施:

结合业务情况,现场定期(如每小时)通过主动执行clean connection进行规避。

CLEAN CONNECTION TO ALL FOR DATABASE dbname;

3)透明大页打开

http://3ms.huawei.com/km/blogs/details/8366421

确认方法:

grep Huge /proc/meminfo

AnonHugePages 过大说明有问题。

4)Kerberos内存泄漏

版本:

8.0版本:已不存在该问题。

6.5.1版本:查看gaussdb版本,客户现场的版本编译时间晚于2019-09-25,不会有该问题。

C80版本:由于kerberos低版本本身有少量内存泄漏,故不能完全避免,但可通过关闭开关的方式规避。客户现场的版本编译时间晚于2019-12-14,会显著改善泄漏的情况(预计可降低1000倍)。

确认方法:

5)LLVM内存泄漏

版本:8.0版本已修复 6.5.1版本暂未回合 C80的808补丁内已回合

确认方法:

1. 查看LLVM总开关是否打开show enable_codegen;

2. 查看客户系统的表结构是否包含列存表。列存表才会触发LLVM。

3. 针对步骤2分析的列存表结合cn日志分析涉及的sql语句。通过explain performance分析改语句是否走到

6)others内存定位方法,jemalloc heap profiling功能

版本:810版本(2020年9月30日)之后的版本支持,需要替换jemalloc的so文件。

替换方法:

1)jemalloc的带有profiling功能的so文件放在$GAUSSHOME/lib/jeprof文件里边。

将这个so放到$GAUSSHOME/lib/下。

2)添加环境变量MALLOC_CONF

export MALLOC_CONF=prof:true,lg_prof_sample:10

lg_prof_sample 代表每分配2^10字节采样一次,采样频率高了之后会有性能影响。

3)kill om_monitor进程,重新加载环境变量,等待om_monitor进程被自动重新拉起。

4)停止集群,或者kill需要监控的实例。

5)检查是否替换成功。

上图中输出t代表成功。

定位方法:

1.跑一会之后查看pv_total_memory_detail的others内存涨的比较高的时候,调用

select * from pv_memory_profiling(2);

之后会在该实例的数据目录输出一个文件

2.获取jemalloc的统计信息。

select * from pv_memory_profiling(3);

在该实例的数据目录输出一个文件

可以将现场的文件取回进行分析。

jeprof --show_bytes --pdf gaussdb(路径) heap(文件) > heap.pdf(自行命名)

通过jeprof工具生成pdf文件,jeprof工具在$GAUSSHOME/bin目录下。

输出的pdf文件如下所示

之后就可以看到是哪个函数占用的内存比较多,从而排查内存占用是否合理。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。