该服务器为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中观察代码段内存,以及数据段内存

最新文章

  1. ocfs2: 搭建环境
  2. Mockito学习资料
  3. 微软职位内部推荐-Senior Development Engineer
  4. 2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告
  5. FlexNOC
  6. Mysql 经典
  7. hdu 2665 Kth number(划分树模板)
  8. javascript进击(八)JSON
  9. 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader
  10. fiddler Composer 构建请求
  11. POJ 2892 Tunnel Warfare (SBT + stack)
  12. 我被SQL注入撞了一下腰
  13. ORA-01092 ORA-12432: LBAC error: zllegnp:OCIStmtExecute 故障一例
  14. 《javascript高级程序设计》笔记三
  15. Nodejs进阶:服务端字符编解码&乱码处理
  16. TX2017秋招笔试题之编码
  17. [js插件开发教程]实现一个比较完整的开源级选项卡插件
  18. Angular4中使用后台去数据,Swiper不能滑动的解决方法(一)
  19. 运用python发邮件
  20. Ubuntu环境下TensorBoard 可视化 不显示数据问题 No scalar data was found...(作者亲测有效)(转)

热门文章

  1. MySQL5.6.35部署
  2. 泛型、反射和抽象工厂结合解决多DB问题
  3. [C++] Swap Two Num
  4. 提高你的Python能力:理解单元测试
  5. Oracle——约束
  6. 反射机制:获取class的方法
  7. Spring框架总结(二)
  8. oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
  9. 如何使用office2016发布CSDN博客
  10. Lua的文件IO操作