我目前对谷歌的用户级内存分配器和TCmalloc感兴趣。
我看到了这页面,它显示了比较PTmalloc2和TCmalloc的一些评估。
我想在我的环境中重建那个实验。
并安装golang,以便使用对此命令调用“pprof”的分析工具。
sudo snap install --classic go 然后,安装google-pprof工具。
go install github.com/google/pprof@latest以上命令从这里获取
最后,我刚刚用Tensorflow MNIST python代码测试了LD_PRELOAD
LD_PRELOAD=/usr/lib/libtcmalloc.so.4 python3 MNIST.py它起作用了。
和生成的堆配置文件二进制文件(.heap)
LD_PRELOAD=/usr/lib/libtcmallo.so.4 HEAPPROFILE=log python3 MNIST.py它也很管用。
使用google进行分析也是有效的。
并在下面的代码中尝试了CPUPROFILE
LD_PRELOAD=/usr/lib/libtcmallo.so.4 CPUPROFILE=cpu python3 MNIST.py它没有起作用。没有输出。
我遗漏了什么?
-my system-
Ubuntu 20.04.1LTS x86-64 5.13.0-35
gcc/g++:9.4.0
CPU: Intel i9-12900 i9
内存:32
感谢您的关注。
我期待着任何答复。
发布于 2022-03-16 11:20:11
我从这网站上找到了我错过的东西!
可执行文件必须通过-lprofiler选项链接。
然后,我用LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtprofiler.so来连接
没有构建的共享库。
整条命令
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc.so:/usr/lib/x86_64-linux-gnu/libprofiler.so CPUPROFILE=tcmalloc_python.prof python3 MNIST.py(使用多个库时必须与:__(colon)分离)
如果遇到"ERROR: ld.so: object LD_PRELOAD无法预加载(不能打开共享对象文件):忽略“消息,则必须在该路径中不存在库文件。
所以,换一种方式重新安装pprof就行了。
试一试
sudo apt install google-pprof-dev 或
sudo apt-get install golang-github-google-pprof-dev然后,重试上面的命令(LD_PRELOAD~)。看起来不错。
引用自这里。
在我的例子中,它是有效的。
训练完成后,生成一些.prof文件!
但是,pprof不适用于python代码(只有c/c++可执行文件)。
我会想办法的。(有什么想法吗?)
因此,我从这里找到了一些测试代码,并构建了一个可执行文件。
然后尝试了pprof,它起作用了!(pprof手册)
https://stackoverflow.com/questions/71478754
复制相似问题