Search Posts

标签: cli-tools

使用python3自带的trace模块跟踪调试脚本执行过程,实现python脚本的运行性能分析和问题调试

python 的 trace 调试介绍

python -m trace --trace xxxxx.py 是一种 Python 命令行方式,它可以用于代码调试和性能分析。具体来说,它可以让你跟踪 Python 程序的执行过程,记录下每个语句的执行情况,以及它们所花费的时间和调用次数等信息。

python trace运行方式的优势包括:

  1. 代码调试:trace 模块可以帮助你找出代码中的错误和潜在问题,因为它可以记录每个语句的执行情况,以及它们所花费的时间和调用次数等信息。这有助于你分析代码的执行过程,并找出可能导致程序崩溃或性能下降的问题。

  2. 性能分析:trace 模块还可以帮助你分析代码的性能问题,因为它可以记录每个语句的执行时间和调用次数等信息。这有助于你找出代码中的瓶颈,并进行优化,以提高程序的性能。

  3. 应用广泛:trace 模块是 Python 自带的标准库,因此在各种 Python 环境中都可以使用。无论是在本地开发环境中,还是在部署服务器上,都可以使用这种方式来进行代码调试和性能分析。

python trace方式潜在的问题

需要注意的是,在使用 trace 模块时,由于它会记录每个语句的执行情况,因此可能会对程序的性能产生一定影响,特别是对于大型程序和高并发程序来说,可能会影响程序的运行速度。因此,在使用 trace 模块时,需要谨慎选择需要跟踪的语句和模块,以避免对程序的性能产生太大的影响。

调试结果的输出如何保存为文件、如何可视化

python -m trace --trace xxxxx.py 命令行方式会将跟踪信息输出到标准输出,而不会生成 dump 文件。如果你需要将跟踪信息保存到文件中,可以使用 -o 选项指定输出文件名,例如:

python -m trace --trace -o trace.log xxxxx.py

这样就会将跟踪信息保存到 trace.log 文件中。

python trace实时查看运行状态

关于实时查看运行状态,trace 模块本身并没有提供实时查看运行状态的功能。但你可以在程序运行时,通过打印一些调试信息来实现实时查看的效果。例如,在程序中插入一些 print() 语句,输出一些关键信息,就可以在程序运行时实时查看运行状态。

python trace结果如何通过web界面查看?

若要通过web 面板查看结果python trace的结果,你可以使用一些第三方工具来对 trace 产生的跟踪信息进行可视化。例如,SnakeViz 工具可以将 trace 产生的跟踪信息可视化为交互式火焰图,帮助你更直观地分析和优化程序的性能。你可以通过 pip 命令安装 SnakeViz,然后使用以下命令启动:

pip install snakeviz

python -m cProfile -o trace.out xxxxx.py
snakeviz trace.out

其中 -o 选项用于将 trace 产生的跟踪信息保存到文件中,snakeviz 命令用于启动 SnakeViz 工具并打开可视化界面。在界面中,你可以查看整个程序的执行过程,找出代码瓶颈,优化程序性能。… 查看余下内容

书籍《Linux高效运维实战》推荐的一些Linux性能检测工具

linux下的性能监控工具命令

htop 命令

htop的优势是可以直接看到进程的启动命令。而且可以看进程树。支持水平、垂直方向 滚动。直接对该进程进行管理操作。

smem 命令

smem 是一款linux下的内存使用情况报告工具。能够给出linux下的内存使用的多种报告。和其他传统内存报告工具不通的是,有一个独特功能:报告PSS,即物理内存使用情况。

因为linux使用的虚拟内存,要准确计算一个进程实际使用的物理内存就不容易。但只知道一个进程的虚拟内存大小也并没有太大用处,因为还无法获取到实际占用的物理内存大小。

RSS (Resident Set Size)

使用top命令可以看到。表示进程占用的物理内存大小。但是将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。

PSS:(Proportional Set Size)

所有使用某共享库的程序均分该共享库的内存。显然所有进程的PSS之和就是系统的内存使用量。他会更准确一些,它将共享内存的大小进行平均后,再分摊到各个进程上去。

USS(Unique Set Size)

进程独自占用的内存。它只计算了进程独自占用的内存大小,不包含任何任何共享的部分。

smem 使用例子:

smem -p (百分比的形式查看内存使用情况)

smem -u (查看每个用户的内存使用情况)

smem -P nginx ( 查看某个进程占用内存大小)

smem -k -P nginx ( 查看某个进程占用内存大小) 

vmstat 命令可以看cpu 和内存(swap)、io占用情况。注意其中swap 即使有占用的话也要根据 si和so  来判断swap是否合理。

《linux高效运维实战》中,对swap占用的说明提到 ,vmstat 命令查询资源占用结果(以上第二图)里面 memory 列内的 swap列 表示切换到内存交换区的内存数量(KB 为单位)。如果swap值不为0,或者比较大,那么只要si 和so 的值长期 为0即没有影响 ( si 、 so全称是 swap in 和 swap out ,即换入 和 换出 的 交换内存量,即换入换出多的话会对IO产生实际压力)。这种情况下一般不用担心,不会影响系统性能。(如果si/so 长期不为0, 表示系统内存不足,需要增加系统内存)

iotop 可以监控磁盘I/O使用状况,检测到哪一个程序使用的磁盘I/O异常。

网络检测工具:

mtr 网络检测

mtr是linux 一个非常棒的网络连通性判断工具,结合了 ping traceroute,nslookup的相关特性。

列含义:

loss%是对应IP行的丢包率,值得一提的是,只有最后的目标丢包才算是真正的丢包。

Last列是最后一次返回的延迟,按毫秒计算的。

Avg列是所有返回延时的平均值。

Best列是最快的一次返回延时。

Wrst 是最差。

StDev列是标准偏差。

tcpdump 网络抓包分析工具命令

tcpdump 命令抓包分析:

参数:

-i 指定网卡,默认是eth0

-n线上IP,而不是hostname

-c 指定抓到多少个包后退出。

-A 以ASCII方式显示包的内容。这个选项对文本格式的协议包很有用。

-x 以16进制显示包的内容。

-vvv显示详细信息。

-s 按长包截取数据。默认是60字节,如何包大于60字节,则抓包会出现丢数据现象。所以一般会设置-s 0,这样会按照包的大小截取数据。并且抓到的是完整的包数据。

-r 从文件中读取(与-w 对应,例如,tcpdump -w test.out… 查看余下内容

加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消