为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
why my c++ program uses significant memory when doing tcmalloc heap-checker or heap-profile
CentOS Linux Release 7.3.1611
GCC 版本 4.8.5 20150623
Gperftool 2.4-8.el7
链接 -ltcmalloc 的 1.my c++ 程序在没有 HEAPCHECKER 或 HEAPPROFILE 的情况下工作正常。它使用的内存稳定在5M~10M。
2.如果我使用堆检查器运行程序,环境堆检查器=正常,内存每小时增加约50M,直到OOM杀手。
3.如果我使用堆配置文件与env HEAPPROFILE="./hp" HEAP_PROFILE_ALLOCATION_INTERVAL=100000000,内存每 40 分钟增加约 100M,并且还会触发 OOM。但是,当我使用 pprof 分析堆文件时,它显示总内存仅为 0.1MB,而我期望为 100M。
我知道堆检查器和堆配置文件会导致额外的内存使用,因为它们需要记录一些其他信息来跟踪内存分配,但我认为这不是我的情况的原因。
我将堆检查器和堆配置文件与另一个小程序一起使用,效果很好。
这两个程序之间最大的区别是,有缺陷的程序使用协程,我的意思是函数交换上下文,getcontext和makecontext。
我的问题是:
问题 1.为什么当我设置 HEAP_PROFILE_ALLOCATION_INTERVAL=1000000000 时,pprof 打开的堆文件显示总内存为 0.1M?
堆检查器或堆配置文件 Q2.Is 可能不能很好地与这些协程函数配合使用?
我假设您正在使用堆栈协程,因此您一直在创建新堆栈。很可能是当您运行检查器时,堆栈不再完全破坏/释放,因此它们实际上会泄漏。
相关文章:
- 无法找到/读取配置文件.conf-FileIOException
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 一种在C++中读取TXT配置文件的简单方法
- FFMPEG配置文件级别id大小无效
- 配置文件解析器仅返回以前的值
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- Boost program_options将多个配置文件解析结果存储到一个parsed_options中
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 我应该如何获取配置文件的绝对路径与 Windows .exe一起发布?
- JPG-如何从ICC配置文件部分APP2读取/提取数据
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- boost::p rogram_options 配置文件格式
- 如何在Boost::program_options配置文件中为非字符串的自定义选项值类型处理空格
- 如何在 Boost Program_Options 中使用命令行和分层配置文件的选项
- 如何将不可编译的配置文件添加到QT工程中?
- OpenGL不能在核心配置文件中使用glVertexAttrib进行绘制
- 错误 VSP1011:无法获取调试信息.与 /配置文件链接器开关链接
- 解析程序配置文件
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?