一个python 服务器程序性能分析
该服务器为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中观察代码段内存,以及数据段内存
一个python 服务器程序性能分析的更多相关文章
- Python应用02 Python服务器进化
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleH ...
- Python应用01 原始Python服务器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架( ...
- Python网络02 Python服务器进化
原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3. ...
- Python网络01 原始Python服务器
原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...
- 用python自建一个DNS服务器
前段日子一直在做公司的DNS调度程序,不过由于性能比较差,方案最终废弃掉了.两个半月心血,不想白白浪费掉,于是改了改,把商业秘密相关的部分去掉,变成了一个公共的DNS服务器.其实说的简单点,就是一个可 ...
- Linux程序性能分析和火焰图
Linux程序性能分析和火焰图 Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多.其中应用分析性能方面Dtrace, Syst ...
- 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- Linux下的应用程序性能分析 总结
Linux下的应用程序性能分析,根据内核程序和应用程序的不同,下文分两类进行描述. 我们侧重的是应用级别的程序,推荐google perf tool/kcachegrind组合 一.和内核有关的工具 ...
- 流行python服务器框架
流行python服务器框架 1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted ...
随机推荐
- 花了好几个小时的奇葩Mat为0问题
问题 1. Mat mserMat = adaptive_image_from_points(contour, rect); CCharacter character; character.setCh ...
- js 数字游戏
在某网站看到一道js题,觉得有点意思 Some numbers have funny properties. For example: 89 --> 8¹ + 9² = 89 * 1 695 - ...
- sql分组获取第一条记录(sql+oracle)
sql版本 select * from (select t.CloseDate,t.ExpiryDate,t.DataTypeLookupID,ROW_NUMBER() over(partition ...
- Tag recommendaion... 论文中的小例子,使用HOSVD算法推荐
本文内容来自于论文:Tag recommendations based on tensor dimensioanlity reduction 在社会标签系统中,存在三元关系,用户-物品-标签.这些数据 ...
- .NET开源MSSQL、Redis监控产品Opserver之MSSQL配置
MSSQL的配置比较简单,主要包括三部分: 默认配置(defaultConnectionString).集群配置(clusters).单实例配置(instances) defaultConnectio ...
- [GO]接口的嵌用继承
package main import "fmt" type Humaner interface { SayHi() } type Personer interface { Hum ...
- java解决跨域
方法中response.setHeader("Access-Control-Allow-Origin", "https://ding.taozugong.com" ...
- ASP.NET’s compilation system
Compilation in ASP.NET applications First, let’s take a moment to revisit compilation in the context ...
- RollingFileAppender
http://logback.qos.ch/manual/appenders.html#RollingFileAppender 1.基于时间的滚动策略 TimeBasedRollingPolicy 就 ...
- javascript 多个frame之间的交互
主页面 Web.html (加载了两个frame 分别为A.html) <html lang="en"> <head> <meta charset= ...