使用Google开源工具gperftools进行堆内存占用分析

背景:项目中有多卡训练的需求,多进程时每个进程都需要编译,占用内存过大,需要找出内存占用多的点并尝试优化。
目标程序是python的多进程程序,torch_xla多卡训练,程序包含python及c++库,尝试过其他工具发现并不合适,最终采用此工具。

工具介绍

This is the heap profiler we use at Google, to explore how C++ programs manage memory. This facility can be useful for:

  • Figuring out what is in the program heap at any given time
  • Locating memory leaks
  • Finding places that do a lot of allocation

有2种使用方式,这里采用非侵入式的方式,即通过设置环境变量,hook内存分配的接口,例如:

env LD_PRELOAD=“/usr/lib/libtcmalloc.so”

使用过程

dump:

mkdir profs_gen
# dump size选项参考Modifying Runtime Behavior一节
export HEAP_PROFILE_ALLOCATION_INTERVAL=10737418240
export HEAP_PROFILE_INUSE_INTERVAL=10737418240
LD_PRELOAD=/usr/local/lib/libtcmalloc.so HEAPPROFILE=profs_gen/profs python distributed_train.py

得到分析结果:

# 到terminal
pprof --text /bin/ls profs.0001.heap
# 或生成pdf
pprof --pdf /bin/ls profs_gen2/profs.0002.heap > profs.0002.pdf

分析

这里分析其中一路内存占用:
在这里插入图片描述

编译安装

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
./configure
make && make install

若要使用--pdf选项生成pdf文档,需要另外安装依赖库:

sudo apt-get install ghostscript # ps2pdf
sudo apt-get install graphviz # dot

参考资料

Gperftools Heap Profiler
pprof on Github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444074.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精益生产现场管理和改善:从知识到实操的落地

在制造业的广阔天地中,精益生产作为一种追求浪费最小化、效率最大化的生产管理模式,已成为众多企业转型升级的关键路径。本文,深圳天行健企业管理咨询公司将从精益生产现场管理和改善的理论知识出发,深入探讨其从理念导入到实操落…

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空 修改表添加字段语法示例注意事项 删除字段语法示例 修改字段使用 MODIFY COLUMN语法示例 使用 CHANGE COLUMN语法示例 重命名表语法示例 删除表语法示例 清空表使用 TRUNCATE TABLE使用 DELETE FROM对比 TRUNC…

pytest框架之fixture测试夹具详解

前言 大家下午好呀,今天呢来和大家唠唠pytest中的fixtures夹具的详解,废话就不多说了咱们直接进入主题哈。 一、fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown,但相对之下它的功能更加强大和灵活。 …

宠物空气净化器该怎么选?希喂,小米、安德迈这三款好用吗?

不得不说,虽然现在购物网站的活动不少,可力度都好弱啊!我想买宠物空气净化器很久了,觉得有点贵,一直没舍得入手。价格一直没变化,平台小活动根本没什么优惠,只能寄希望于双十一了,准…

【docker】要将容器中的 livox_to_pointcloud2 文件夹复制到宿主机上

复制文件夹 使用 docker cp 命令从容器复制文件夹到宿主机&#xff1a; docker cp <container_id_or_name>:/ws_livox/src/livox_to_pointcloud2 /path/to/host/folder sudo docker cp dandong_orin_docker:/ws_livox/src/livox_to_pointcloud2 /home

WPS的JS宏实现删除某级标题下的所有内容

想要删除Word文档中&#xff0c;包含特定描述的标题下所有内容&#xff08;包含各级子标题以及正文描述&#xff09;。 例如下图中&#xff0c;想删除1.2.1.19.1业务场景下所有内容&#xff1a; 简单版&#xff1a; 删除光标停留位置的大纲级别下所有的内容。实现的JS代码如下…

【YOLO学习】YOLOv2详解

文章目录 1. 概述2. Better2.1 Batch Normalization&#xff08;批归一化&#xff09;2.2 High Resolution Classifier&#xff08;高分辨率分类器&#xff09;2.3 Convolutional With Anchor Boxes&#xff08;带有Anchor Boxes的卷积&#xff09;2.4 Dimension Clusters&…

光伏开发:一充一放和两充两放是什么意思?

一充一放 一充一放是指储能设备在一次充电过程中充满电&#xff0c;并在一次放电过程中将电能全部释放。这种模式的原理相对简单&#xff0c;充电时电能转化为化学能或其他形式的能量储存&#xff0c;放电时则将这些能量转化回电能供应给负载。一充一放模式适用于对储能设备充…

2024年9月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年9月国产数据库大事件和重要产品发布消息。 目录 2024年9月国产数据库大事记 TOP102024年9月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布兼容认证代表厂商大事记厂商活动相关资料 2024年9月国产数据库大事记 TOP10 2024年9月国…

51单片机的无线通信智能车库门【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块红外传感器光照传感器时钟模块步进电机蓝牙按键、LED、蜂鸣器等模块构成。适用于智能车库自动门、无线控制车库门等相似项目。 可实现功能: 1、LCD1602实时显示北京时间和自动/手动模式&#xff0c;以及验证是否成…

揭秘HCIE证书:职场神话or锦上添花?深度剖析!

HCIE&#xff1a;职场赛道上的加速器 在职场这条充满挑战与机遇的赛道上&#xff0c;每个人都渴望找到那个能让自己加速前行的助推器。 HCIE证书&#xff0c;作为IT领域的顶级认证&#xff0c;无疑成为了许多人心目中的理想选择。它不仅是华为对网络专家专业能力的认可&#…

Biomamba求职| 国奖+4篇一作SCI

转眼间我也要参加秋招啦&#xff0c;认真的求职帖&#xff0c;各位老师/老板欢迎联系~其它需要求职的小伙伴也欢迎把简历发给我们&#xff0c;大家一起找工作。 一、基本信息 姓名&#xff1a;Biomamba 性别&#xff1a;男 出厂年份&#xff1a;1998 籍贯&#xff1a;浙江…

App测试时常用的adb命令

adb 全称为 Android Debug Bridge&#xff08;Android 调试桥&#xff09;&#xff0c;是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#xff0c;可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

如何构建某一行业的知识图谱

构建一个行业的知识图谱是一个系统而复杂的过程&#xff0c;它涉及到数据收集、处理、分析等多个环节。以下是构建行业知识图谱的基本步骤&#xff1a; 1. 需求分析&#xff1a; - 明确构建知识图谱的目的和应用场景&#xff0c;比如是用于辅助决策、市场分析、产品推荐等。…

k8s网络通信

k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较流行的插件有flannel&#xff0c;calico等 CNI插件存放位置&#xff1a;# cat /etc/cni/net.d/10-flannel.conflist 插件使用的解决方案如下 虚拟网桥&#xff0c;虚拟网卡&#xff0c;多个容器共用一个虚…

模拟实现消息队列(基于SpringBoot实现)

项目代码 提要&#xff1a;此处的消息队列是仿照RabbitMQ实现&#xff08;参数之类的&#xff09;&#xff0c;实现一些基本的操作&#xff1a;创建/销毁交互机&#xff08;exchangeDeclare&#xff0c;exchangeDelete&#xff09;&#xff0c;队列&#xff08;queueDeclare&a…

<Rust>iced库(0.13.1)学习之部件(三十二):使用markdown部件来编辑md文档

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的第三十二篇,主要介绍一…

zabbix7.0配置中文界面

Zabbix 是一个广泛使用的开源监控解决方案&#xff0c;支持多种语言界面。本文将详细介绍如何配置 Zabbix 以使用中文界面&#xff0c;从而提高用户体验和可读性。 1. 环境准备 在开始配置之前&#xff0c;请确保你已经安装并运行了 Zabbix 服务器、前端和数据库。如果你还没有…

WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?

引言 最近因为一个触发器设置的结果总是不起效果的原因&#xff0c;进一步去了解[依赖属性的优先级](Dependency property value precedence - WPF .NET | Microsoft Learn)。在学习这个的过程中发现对SetCurrentValue一直以来的谬误。 在WPF中依赖属性Dependency property的…

从0到1:小区业主决策投票小程序开发笔记

可研 小区业主决策投票小程序&#xff1a; 便于业主参与社区事务的决策&#xff0c;通过网络投票的形式&#xff0c;大大节省了业委会和业主时间&#xff0c;也提高了投票率。其主要功能&#xff1a;通过身份证、业主证或其他方式确认用户身份&#xff1b;小区管理人员或业委会…