introduction
在一次版本的迭代后,第二天发现cpu
的占用率大量飙升,最开始以为是版本迭代时的错误代码导致,后来经过排查,发现是用户量的提升,导致以前没有暴露出来的问题突然暴露出来,随后用python
那一套优化工具进行检测优化,并且成功把cpu
占用率重新拉低到10%。
1. 测试python
执行效率的工具
这里有各种工具的介绍
http
://python
.jobbole
.com/80754/#article-comment
(1)cprofile
的使用
根据监控项目出现的问题,分析后决定使用cprofile
去检测。主要是可以检测函数消耗,而且使用方便,可以对代码无侵占式的进行检测。
使用以下代码执行py脚本
-m
使用cprofile
模块
-o
输出位置
-s
累加
刚执行的时候,输出文件时不存在的,只有结束之后才会在目标位置出现输出文件。
(2)安装将文件传输到你本地的机器
由于该测试是在linux
服务器上运行,我们需要把结果文件传到本地,用图形化的分析工具区分析,当然也可以直接用工具在shell
打印分析,但是很不友好。
这里我们是用scp
这个工具去拉取,由于scp
默认是22端口,但是linux
服务器是通过秘钥登陆,并且端口是9528,所以我们应该这么使用这个命令,重远程服务器拉取
-P
端口
remote
_addr
远程地址ip或者域名
/dir/ 远程文件位置
/home/bo/test 本机目录
2. 图形化分析工具snakeviz
使用snakeviz来分析刚才我们得到的cprofile.log
(1)安装
pip install snakeviz
(2)使用
(3)分析
如上图所示,刚开始时一个十分亮丽的圆形,这里我们切换到另外一种形态去分析。
这样十分直观,这里我们一看就知道zmq
和deepcopy
的消耗十分大,因为项目用deepcopy
毫无节制(当初是为了安全),这里为了效率只能”危险“一点,直接使用引用这样少了很多消耗。优化后从高峰100%的CPU使用率降低到20-30%左右,
可以说是非常明显的优化了。如下图所示,
美中不足的是,cprofile
运行时间太少,可以运行几个钟再来看,分析效果会更好。