您的位置:首页 > 编程语言 > Python开发

一个python 服务器程序性能分析

2016-02-24 18:26 671 查看
该服务器为bono,启动11个进程。

1.设置cprofile

在启动服务的总入口设置cprofile

if __name__=="__main__":
import cProfile
cProfile.run('main()','bono.profile')


2.time对程序计时

使用命令行中的time运行

$time python xxx.py   ###


服务一直运行,等待几秒后,停止服务,在命令行中显示:   分析 等待时间为16.793(17.709-0.792-0.124) ;内核运行时间为0.124 ;用户态运行时间 0.792

real    0m17.709s
user    0m0.792s
sys    0m0.124s


3.分析profile文件

使用runsnake分析profile文件:按照local(本函数执行时间不包括子函数)排序

  其中time.sleep大概为16.95秒,跟time命令分析相近;为服务主动休眠时间。

  列名含义:调用次数,相对调用次数,本地执行时间,平均本地执行时间,总执行时间,平均每次执行执行,文件名,行名,目录名

  点击左侧的行,在右侧可以展现这个函数里面的内部的调用以及花费时间。面积即时间大小。



4.结合top分析:

在使用time启动程序的时候,找到相应的进程,使用top监控程序。记录top各个进程的时间状态,停止程序,显示time计时。

$top -p N1,N2,N3 ...###N1,N2,N3等都是该进程组下面的进程


获取top的time数值,发现将所有进程的time数值相加= user态+sys态 的时间和。

这是证明,time的3个值 real,user,sys

sys是多个进程的系统态运行时间的累加和

user是多个进程的用户态运行时间的累加和

real经过启动到停止之间的时间段,并非将每个进程累加。

5.改善性能

  判断程序类型:是IO密集型还是计算密集型

    根据time计时,程序cpu利用时间并不高,因此可以判断是io密集型

  优化程序时间

    根据runsnake,对本地调用时间(call字段),进行排序,可以找到调用最费时的代码

  优化内存使用:

    在top中记录了虚拟内存与驻留内存,也可以在top中观察代码段内存,以及数据段内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: