该服务器为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 服务器程序性能分析的更多相关文章

  1. Python应用02 Python服务器进化

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleH ...

  2. Python应用01 原始Python服务器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架( ...

  3. Python网络02 Python服务器进化

    原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3. ...

  4. Python网络01 原始Python服务器

    原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...

  5. 用python自建一个DNS服务器

    前段日子一直在做公司的DNS调度程序,不过由于性能比较差,方案最终废弃掉了.两个半月心血,不想白白浪费掉,于是改了改,把商业秘密相关的部分去掉,变成了一个公共的DNS服务器.其实说的简单点,就是一个可 ...

  6. Linux程序性能分析和火焰图

    Linux程序性能分析和火焰图 Linux程序的性能分析工具数量比较多,涉及到整个操作系统的方方面面,可能是开源的原因吧,相对于Windows来说丰富太多.其中应用分析性能方面Dtrace, Syst ...

  7. 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  8. Linux下的应用程序性能分析 总结

    Linux下的应用程序性能分析,根据内核程序和应用程序的不同,下文分两类进行描述. 我们侧重的是应用级别的程序,推荐google perf tool/kcachegrind组合 一.和内核有关的工具 ...

  9. 流行python服务器框架

    流行python服务器框架   1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted ...

随机推荐

  1. Java中文乱码解决方案

    Java中文乱码解决方案   1.中文乱码解决方案,确保每个文件的默认编码是UTF-8         加入 URIEncoding="UTF-8" 代码中的设置 1>在se ...

  2. Openssl sess_id命令

    一.简介 sess_id指令是一个调试工具,用来处理SSL_SESSION结构的,可以打印出其中的细节 二.语法 openssl sess_id [-inform PEM|DER] [-outform ...

  3. toFixed

    1,toFixed要使用与Number数据类型 2.parseInt将字符串转换为整形 3.parseFloat将字符串转换为浮点型

  4. LoadRunner出现error问题及解决方法总结

    一.Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤:1.   修改run time setting中的请求超时时间,增加到600 ...

  5. bootstrap导入JavaScript插件

    Bootstrap的JavaScript插件可以单独导入到页面中,也可以一次性导入到页面中.因为在Bootstrap中的JavaScript插件都是依赖于jQuery库,所以不论是单独导入还一次性导入 ...

  6. C#通过Redis实现分布式锁

    Redis有三个最基本属性来保证分布式锁的有效实现: 安全性: 互斥,在任何时候,只有一个客户端能持有锁. 活跃性A:没有死锁,即使客户端在持有锁的时候崩溃,最后也会有其他客户端能获得锁,超时机制. ...

  7. [GO]结构体成员的使用:指针变量

    package main import "fmt" func main() { type student struct { id int name string sex byte ...

  8. HDU 1111 Secret Code (DFS)

    题目链接 题意 : 给你复数X的Xr和Xi,B的Br和Bi,让你求一个数列,使得X = a0 + a1B + a2B2 + ...+ anBn,X=Xr+i*Xi,B=Br+Bi*i : 思路 : 首 ...

  9. GitHub 出现这样的问题怎么办

    一开始以为是被墙,憋个半死. 后来自己好了(大概过了一上午),虚惊一场.

  10. g++中宏NULL究竟是什么?

    NULL是个指针,还是个整数?0?或(void*)0?答案是和g++版本有关.g++ 4.6支持C++11,引入了nullptr,也许会发生变化. 可以写段简单代码求证一下: #include < ...