一个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 ...
随机推荐
- Android有趣的全透明效果--Activity及Dialog的全透明(附android系统自带图标大全)[转]
原文地址:http://blog.csdn.net/sodino/article/details/5822147 1.Activity全透明 同学zzm给了这个有趣的代码,现在公布出来. 先在res/ ...
- logback与log4j比较
摘自:https://www.cnblogs.com/smile361/p/7592684.html logback与log4j比较 更快的执行速度: 基于我们先前在log4j上的工作,logback ...
- hibernate方言
hibernate中,方言是解决hql翻译成sql保证语法的正确,首先数据库都是支持sql的,不同的数据库会存在一些语法上面的差异.HQL则是基于对象的查询语言,当系统需要数据库的变换时,那么用hib ...
- [GO]使用bufio的文件读取方式
package main import ( "os" "fmt" "bufio" "io" ) func ReadFil ...
- 【转载】redis.conf文件详解
转载地址:http://blog.csdn.net/zhutulang/article/details/51969760 Redis.conf文件可以在github上查看,下面是我整理的其中的配置项( ...
- Word 2010发布博客文章(修正)
目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...
- 暂停、恢复CALayer 动画
CALayer都是实现了CAMediaTiming协议(或者叫做接口).所以layer的动画有一个很有意思的属性speed.如果一个layer的动画速度变成0.0的时候,很显然这个动画就不再动了.设置 ...
- Java多线程设计模式(一)
目录(?)[-] Java多线程基础 Thread类的run方法和start方法 线程的启动 线程的暂时停在 线程的共享互斥 线程的协调 Single Threaded Execution Patte ...
- android的样式(style)与主题(theme)
Android上的Style分为了两个方面: 1,Theme是针对窗体级别的,改变窗体样式: 2,Style是针对窗体元素级别的,改变指定控件或者Layout的样式. Android系统的themes ...
- 使用pycharm专业版创建虚拟环境
Location为工程地址 D:\My_python 第二个Location为 虚拟环境放在这个工程下 Base interpreter:基于那个解释器来创建虚拟环境 Create后进入到目录查看下