一个python 服务器程序性能分析
2024-08-23 15:23:06
该服务器为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中观察代码段内存,以及数据段内存
最新文章
- ocfs2: 搭建环境
- Mockito学习资料
- 微软职位内部推荐-Senior Development Engineer
- 2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告
- FlexNOC
- Mysql 经典
- hdu 2665 Kth number(划分树模板)
- javascript进击(八)JSON
- 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader
- fiddler Composer 构建请求
- POJ 2892 Tunnel Warfare (SBT + stack)
- 我被SQL注入撞了一下腰
- ORA-01092 ORA-12432: LBAC error: zllegnp:OCIStmtExecute 故障一例
- 《javascript高级程序设计》笔记三
- Nodejs进阶:服务端字符编解码&;乱码处理
- TX2017秋招笔试题之编码
- [js插件开发教程]实现一个比较完整的开源级选项卡插件
- Angular4中使用后台去数据,Swiper不能滑动的解决方法(一)
- 运用python发邮件
- Ubuntu环境下TensorBoard 可视化 不显示数据问题 No scalar data was found...(作者亲测有效)(转)
热门文章
- MySQL5.6.35部署
- 泛型、反射和抽象工厂结合解决多DB问题
- [C++] Swap Two Num
- 提高你的Python能力:理解单元测试
- Oracle——约束
- 反射机制:获取class的方法
- Spring框架总结(二)
- oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
- 如何使用office2016发布CSDN博客
- Lua的文件IO操作