暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python 内存系列(9)-性能分析其他库推荐

小儿来一壶枸杞酒泡茶 2021-03-09
2140

前言

纯属个人实践中相关经验之谈,如有纰漏,还希望大佬们多多提点!

小钟同学 | 文  【原创】| QQ:308711822

强力推荐新出的性能分析pyroscope

官方地址:https://github.com/pyroscope-io/pyroscope

基于Go开发,支持对python 、go、ruby的分析。专门针对性能调试问题提供持续的性能分析。超强且更明细的火焰图。


主要特性有:

  • 可以存储来自多个应用程序的多年分析数据。
  • 您可以一次查看多年数据,也可以放大特定事件。
  • 低CPU开销
  • 高效压缩,低磁盘空间要求
  • 快速UI
  • 支持Go、Ruby和Python

其他分析

1、Py-Spy

Py-Spy 是 Python 程序的抽样分析器。它可以无侵入性进行系统的程序的分析,而且他的开销极低。它适用于Linux,OSX 和 Windows,并支持分析所有最新版本的 CPython 解释器。

Py-Spy官网地址:

https://github.com/benfred/py-spy

2、pyflame

  • 而另一个生产火焰兔pyflame的神器(uber出品,目前仅支持再linux上,后续再去线上研究使用)还没实践使用

来自参考地址的实践:https://www.dazhuanlan.com/2019/10/15/5da588040eb66/

2.1、环境CentOS7

首先安装系统依赖

sudo yum install autoconf automake gcc-c++ python-devel libtool python3-devel

然后从github上clone项目到本地,并编译:

git clone https://github.com/uber/pyflame.git
cd pyflame
./autogen.sh
./configure
make
make install


然后再clone另一个项目flamegraph到本地:

git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph

查看要调试的进行ID:

ps aux|grep uwsgi

root      3013  0.0  0.7 258924 26556 ?        S    7月20   0:26 uwsgi /var/www/v7/uwsgi.ini
root      3018  2.2  2.3 7886732 86448 ?       Sl   7月20 194:37 uwsgi /var/www/v7/uwsgi.ini
root      3019  2.9  2.3 7027772 85000 ?       Sl   7月20 258:56 uwsgi

运行下面的命令报错

pyflame -s 60 -r 0.01 3019

Failed to detect a Python ABI.

但其实是安装了python-abi的:

rpm -q --provides python | grep abi

python(abi) = 2.7
python(abi) = 2.7
python-abi = 2.7

解决起来需要手动指定--abi参数:

pyflame -s 60 -r 0.01 --abi=26 3013 | ./flamegraph.pl > mypyflame.svg

其中:

  • s 60, 总采样时间为 60s

  • r 0.01, 以0.01s 的频率做采样 一分钟后就可以看到火焰图了。

  • PyRasite 还没实践使用

3、 PyRasite (后续再亲自实践)

PyRasite 内存泄露诊断过程记录pyrasite。

4、 Scalene 高性能 CPU 内存分析器

以下文字描述来自官网:

官网地址:

https://github.com/s1368816131/PY-scalene

支持的平台:

Scalene 通过 pip 包的形式进行分发,可以运行在Mac OS X和Linux平台(包括在Windows WSL2中运行的Ubuntu)。

安装:
 pip install scalene

使用

使用 Scalene 命令在提供的示例程序上执行行级别的CPU分析。

scalene testme.py


4、 pyprof2calltree 图形化调用树的Python模块

帮助可视化使用cProfile收集的分析数据的脚本 带有kcachegrind(screenshots)图形化调用树的Python模块

5、 vprof 交互式的分析数据可视化(不支持windows)

主要用于:对文件进行执行并分析,并在浏览器中生成可视化图标 安装:

pip install vprof

执行分析命令,prof将在默认浏览器中打开新选项卡,然后等待统计数据:

(.venv) PS D:\code\vscode\py> vprof -c cm .\c_profile_text_run.py

windows下执行的会出现以下错误:

AttributeError: module 'signal' has no attribute 'SIGPROF'

因为:python的signal模块中在windos中仅支持一下几个信号:

  • SIGABRT
  • SIGFPE
  • SIGILL
  • SIGINT
  • SIGSEGV
  • SIGTERM

linux下执行正常:


[root@localhost xingnengfenxi]# vprof -c c c_profile_text_run.py
Running FlameGraphProfiler...
Starting HTTP server...


实践参考资料:

http://www.52bug.cn/hacktool/3347.html

https://www.cnblogs.com/shengulong/p/8044132.html

说明

部分的图或资料来互联网收集整理,如有侵权,烦请联系,我会立即进行删除。

End

纯属个人实践中相关经验之谈,如有纰漏,还希望大佬们多多提点!小钟同学 | 文  【原创】| QQ:308711822

如果文章对您有所帮助,不如四连击一下:点在看+分享+收藏+关注呗 !哈哈

如有错误之处也希望能帮忙指出。非常感谢!


文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论