zoukankan      html  css  js  c++  java
  • 一个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中观察代码段内存,以及数据段内存

  • 相关阅读:
    在vue.js中mixin和页面执行顺序问题
    【转载】Node.js 教程(菜鸟教程系列)
    【转载】一致性hash算法释义
    多线程还是多进程的选择及区别
    腾讯
    gdb命令与调试方法
    面试题56:链表中环的入口节点
    面试题52:缺少i的乘积数组
    UML类图
    面试题51:数组中重复的数字
  • 原文地址:https://www.cnblogs.com/yasmi/p/5213927.html
Copyright © 2011-2022 走看看