paip.性能跟踪profile原理与架构与本质-- python扫带java php



##背景

弄个个输入法音标转换atiEnPH工具,老是python性能不的上K,7k记录浏览过k要30分钟了.



##目标

 分析一个程序的性能,最终都归结为回答4个基本的问题:



    程序运行速度有多快?

    运行速度瓶颈在哪儿?

    程序使用了多少内存?

    内存泄露发生在哪里?

    谁引用着泄漏的对象?

    

    

    作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

    

#工具cProfile,objgraph

谁引用着泄漏的对象? 这个可以使用对象引用图来看见..

 该命令的输出应该是一副PNG图像,保存在/tmp/backrefs.png,它看起来是像这样:



back refrences



最下面有红字的盒子是我们感兴趣的对象。我们可以看到,它被符号x引用了一次,被列表y引用了三次。如果是x引起了一个内存泄漏,我们可以使用这个方法,通过跟踪它的所有引用,来检查为什么它没有自动的被释放。



回顾一下,objgraph 使我们可以:



    显示占据python程序内存的头N个对象

    显示一段时间以后哪些对象被删除活增加了

    在我们的脚本中显示某个给定对象的所有引用



#测试代码

import cProfile

 

#直接把分析结果打印到控制台

cProfile.run("mainx()")

#把分析结果保存到文件中,不过内容可读性差...需要调用pstats模块分析结果

#cProfile.run("foo()", "result")

#还可以直接使用命令行进行操作

#>python -m cProfile myscript.py -o result





def convert2atiEnPn(phntc):#17.3s  49tse

        """  æk@sentjueit   >>  e@k@sen@tju@ei@t

        """

        r=""

        

        #print ("o412")

        #print(map)

        #100test logx abt 3s

        #logx("  phntc:---"+phntc)

        li= SybalbeList(phntc)   #7.6s

        #logx("  syblist:---")

        #print_li(li)

        for sbl in li:

            #all saveval invoke time safeVal 5.6s    446tse

            #todox gaicheng  jude modul ..only   0.1s  

            #yuln ...python d excepti jon fei resource l a .

            myvowel=safeVal (map, sbl.vowel,  "")

            mycnst=safeVal (map,  sbl.csnt , "")

            r=r+"@"+mycnst+"-"+myvowel

       # phntc=trim(phntc)

      

        return r

        

#第一的测试

       157277 function calls in 20.648 seconds



   Ordered by: standard name



   ncalls  tottime  percall  cumtime  percall filename:lineno(function)

        1    0.000    0.000   20.648   20.648 <string>:1(<module>)

       49    0.006    0.000   17.359    0.354 <string>:15(convert2atiEnPn)

       49    0.003    0.000    1.105    0.023 <string>:2(updatexo4)

        1    0.003    0.003   20.648   20.648 <string>:37(mainx)        

        

#第二次:



          118375 function calls in 9.266 seconds



   Ordered by: standard name



   ncalls  tottime  percall  cumtime  percall filename:lineno(function)

        1    0.000    0.000    9.265    9.265 <string>:1(<module>)

       49    0.002    0.000    6.395    0.131 <string>:15(convert2atiEnPn)

       49    0.003    0.000    1.155    0.024 <string>:2(updatexo4)

        1    0.004    0.004    9.265    9.265 <string>:39(mainx)    



#分析结果:

能看见,python的异常很消耗性能.   使用 if key in map 代替异常,,,性能消耗从5s直到个0.1s

日志也比较消耗性能        

    

#java跟php的profile

java jprofile,.. php xdebug..





参考

关于Python Profilers性能分析器 - btchenguang - 博客园.htm

Python性能分析指南 - 技术翻译 - 开源中国社区.htm

Python--字典-fussfuss1-ChinaUnix博客.htm

paip.性能跟踪profile原理与架构与本质-- python扫带java php的更多相关文章

  1. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

  2. Zookeeper概论(对zookeeper的概论、原理、架构等的理解)

    Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...

  3. zabbix监控的基础概念、工作原理及架构(一)

    zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...

  4. LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  6. React生命周期和响应式原理(Fiber架构)

    注意:只有类组件才有生命周期钩子函数,函数组件没有生命周期钩子函数. 生命周期 装载阶段:constructor() render() componentDidMount() 更新阶段:render( ...

  7. Atitit paip.对象方法的实现原理与本质.txt

    Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...

  8. paip.关于动画特效原理 html js 框架总结

    paip.关于动画特效原理 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对象 ...

  9. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

随机推荐

  1. Centos上DNS服务器的简单搭建

    1:安装软件包 yum -y install bind bind-chroot bind-utils bind-libs 2:修改配置文件 1): vim  /etc/named.conf 2):在主 ...

  2. Builder(生成器)-对象创建型模式

    一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...

  3. linux编译curl库的动态库so(转)

    转载请注明出处:帘卷西风的专栏(http://blog.csdn.NET/ljxfblog) curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互. 最近项目开始内测,开 ...

  4. Raspberry Pi(树莓派)国内软件源

    树莓派自带的软件源是 deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi 由于网站在国外 ...

  5. 在Windows上运行Tomcat

    一.下载jdk 百度搜索jdk 64位 下载,直接就有链接.或者官网下载 二.下载tomcat http://tomcat.apache.org/ 三.安装jdk并配置环境 安装jdk后进入控制面板- ...

  6. 使用Servlet实现图片下载

    package chensi.com; import java.io.FileInputStream; import java.io.IOException; import java.net.URLE ...

  7. 循环不变量loop invariant 与 算法的正确性

    在论述插入排序的正确性的时候, 书中引入了循环不变量的概念, 刚开始稍微有点不太明白, 早上查了一波资料之后决定把自己的理解记录下来. 什么是循环不变量 ? 在我看来, 所谓循环不变量的就是一个在循环 ...

  8. 洛谷P2014 选课 (树形dp)

    10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...

  9. CGRectXXX笔记

    CoreGraphics中有关CGRect相关函数笔记 1.CGRectInset //该结构体的应用是以原rect为中心,再参考dx,dy,进行缩放或者放大. CGRect rect = CGRec ...

  10. VS2015 建立C++ dll库文件

    最近在写一个图片处理,正好用到C++封装DLL给C#调用,一下是总结:   建立一个C++的Win32DLL,这里要注意选择"Export symbols"导出符号.点击完成. 如 ...