GaussDB(DWS)memcheck版本编译及运行配置
GaussDB(DWS)在特定场景下,运行memcheck版本可以快速发现、定位和解决内存相关问题,十分便捷。但在本地编译运行时,如果环境配置不当,会导致很多问题,本文将介绍GaussDB(DWS)memcheck版本编译及运行相关配置。
编译
本地编译需要设置ulimit -v unlimited选项,Cmack执行需要增加选项-DENABLE_MEMORY_CHECK=ON,例如:
cmake /data1//gaussdb/Build/Cmake/ -DENABLE_MEMORY_CHECK=ON
运行
运行配置需要较大虚拟内存,需配置ulimit -v unlimited
此外,还需要进行Asan配置:
ASAN_OPTIONS="ASAN_OPTIONS=halt_on_error=0:disable_coredump=0:unmap_shadow_on_exit=1:log_path=$HOME/memchk/asan/runlog:alloc_dealloc_mismatch=1:fast_unwind_on_fatal=1:detect_leaks=1"
各参数含义:
# halt_on_error=0; 检测内存错误后继续运行
# detect_leaks=1;使能内存泄露检测
# malloc_context_size=15 : 内存错误发生时,显示的调用栈层数为15
# log_path=/home/xos/asan.log : 内存检查问题日志存放文件路径
# suppressions=$SUPP_FILE : 屏蔽打印某些内存错误
配置完成后,可正常执行:
make fastcheck p=34567
若未进行正确的选项配置,例如halt_on_error,则可能出现起集群过程中检测到内存泄露直接退出。
可能会出现提示:请配置LD_PRELOAD环境变量,或者直接core dump, 或者提示本该属于leak检查的内存映射段被其他dso占用了,都需要配置正确的LD_PRELOAD环境变量。例如:
export LD_PRELOAD=/root/local/lib64/libasan.so
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~
- 点赞
- 收藏
- 关注作者
评论(0)