paip.性能跟踪profile原理与架构与本质-- python扫带java php
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的更多相关文章
- JProfiler 解决 Java 服务器的性能跟踪
作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...
- Zookeeper概论(对zookeeper的概论、原理、架构等的理解)
Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...
- zabbix监控的基础概念、工作原理及架构(一)
zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...
- LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Atitit.数据库表的物理存储结构原理与架构设计与实践
Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...
- React生命周期和响应式原理(Fiber架构)
注意:只有类组件才有生命周期钩子函数,函数组件没有生命周期钩子函数. 生命周期 装载阶段:constructor() render() componentDidMount() 更新阶段:render( ...
- Atitit paip.对象方法的实现原理与本质.txt
Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...
- paip.关于动画特效原理 html js 框架总结
paip.关于动画特效原理 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对象 ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
随机推荐
- 2014 ACM/ICPC 北京邀请赛 部分 题解
题目链接:http://acm.bnu.edu.cn/bnuoj/problem.php?search=2014+ACM-ICPC+Beijing+Invitational+Programming+C ...
- decimalFormat("#","##0.00") java
importjava.text.DecimalFormat; publicclassTestNumberFormat{ publicstaticvoidmain(String[]args){ doub ...
- mysql操作--高级
1.视图 2.储存过程 3.SQL编程
- JVM调优-Jva中基本垃圾回收算法
从不同的的角度去划分垃圾回收算法. 按照基本回收策略分 引用计数(Reference Counting) 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...
- Z - Fighting 和 Depth-bias
Depth-bias操作在clipping之后进行实施,所以depth-bias对几何clipping没有影响. 另外需要注意的是:对一个给定体元(primitive),bias值是一个常量,在进行差 ...
- CodeForces 607C (DP) Hard problem
题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...
- ubuntu 环境变量修改和恢复总结[收藏]
在Ubuntu中有如下几个文件可以设置环境变量/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行./etc ...
- javascript 封装分页
最近自己做了一个后台,想把分页通过js给封装起来 于是乎就有了下面的代码 此代码,算是一个半成品,还需完善,思路还是可以借鉴的 page方法传入3个参数 1.total总条数 2.page当前页码 3 ...
- Maven学习之 仓库镜像
使用仓库镜像 仓库可以声明在项目中,但有时,你可能想要使用某个仓库的镜像,而不去修改项目文件. 使用镜像的原因: 有一个同步镜像,且速度更快. 想使用你自己控制的内部仓库. 想运行repository ...
- Azure IaaS 用户手册 - 第一部分
可用性集 相当于AZ? 能实现跨Rack的可用性? Azure 如何保证 CPU.内存.硬盘的性能? 传统的 Hyper-V 技术,其CPU 是共享的.比如您的 ThinkPad T430S 是 4C ...