我现在使用cProfile但是我觉得编写pstats代码只是为了查询统计数据很繁琐.
我正在寻找一个可视化工具,向我展示我的Python代码在CPU时间和内存分配方面的作用.
Java世界的一些例子是visualvm和JProfiler.
我知道KCachegrind for Linux,但我更喜欢可以在Windows/Mac上运行而无需安装KDE的东西.
分析PHP页面内存使用情况的好方法是什么?例如,查看我的数据使用了多少内存,和/或哪些函数调用分配的内存最多.
xdebug似乎没有在其分析功能中提供内存信息.
xdebug 确实在其跟踪功能中提供了它.这非常接近我想要的,除了大量的数据是压倒性的,因为它显示了每个函数调用的内存增量.如果可以隐藏一定深度以下的调用,可能使用一些GUI工具,这将解决我的问题.
还有别的事吗?
在VBA中是否有代码可以包装一个函数,让我知道它运行的时间,以便我可以比较函数的不同运行时间?
是否有一个很好的javascript探查器?我知道firebug对分析代码有一些支持.但我想确定较长时间的统计数据.想象一下,您正在构建大量的JavaScript代码,并且您想要确定代码中的实际瓶颈.首先,我想查看每个javascript函数和执行时间的配置文件统计信息.接下来将包括DOM函数.这与减慢渲染树上的操作的动作相结合将是完美的.如果性能在我的代码,DOM准备或渲染树/视觉更新中被杀死,我认为这会给人留下好印象.
有什么东西接近我想要的东西吗?或者什么是最好的工具来实现我所描述的最多?它是一个自编编译器加上由配置文件功能增强的javascript引擎吗?
在了解java内存分析的同时,除了"堆"之外,我还不断看到"perm space"这个术语.我知道堆是什么 - 什么是烫发空间?
我需要一个C#profiler.
虽然我不反对支付一个,但是免费或者至少试用版的东西是理想的,因为提交采购订单需要时间.
有什么建议?
到目前为止,我只使用过Rational Quantify.我听说过有关英特尔VTune的好消息,但从未尝试过!
编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好结果的唯一方法.
我正在寻找一个免费的ASP.NET分析器,我偶然发现了EQATEC Profiler for .NET,但我找不到任何有关如何用它来分析ASP.NET项目的说明.请发布分步说明或包含足够信息的链接.
我正在使用Visual Studio 2008 Professional和.NET 3.5.
这是我一直试图追踪几个月的问题.我有一个运行java应用程序来处理xml提要并将结果存储在数据库中.存在非常难以追踪的间歇性资源问题.
背景: 在生产盒(问题最明显的地方),我没有特别好的访问框,并且无法运行Jprofiler.那个盒子是64位四核,8GB机器运行centos 5.2,tomcat6和java 1.6.0.11.它从这些java-opts开始
JAVA_OPTS="-server -Xmx5g -Xms4g -Xss256k -XX:MaxPermSize=256m -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+PrintTenuringDistribution -XX:+UseParNewGC"
Run Code Online (Sandbox Code Playgroud)
技术堆栈如下:
我能解决的最接近问题的是32位机器,内存要求较低.我确实有控制权.我已经使用JProfiler探测它并修复了许多性能问题(同步问题,预编译/缓存xpath查询,减少了线程池,删除了不必要的hibernate预取,以及在处理过程中过度热心的"缓存变暖").
在每种情况下,分析器都会将这些资源显示为由于某种原因而占用大量资源,并且一旦发生变化,这些资源就不再是主要资源.
问题: JVM似乎完全忽略了内存使用设置,填满了所有内存并且没有响应.对于面向客户的人来说,这是一个问题,他们期望定期投票(5分钟和1分钟重试),以及我们的运营团队,他们经常被告知箱子已经无响应并且必须重新启动它.这个盒子上没有其他重要的东西.
问题似乎是垃圾收集.我们正在使用ConcurrentMarkSweep(如上所述)收集器,因为原始STW收集器导致JDBC超时并变得越来越慢.日志显示,随着内存使用量的增加,这开始引发cms失败,并回到最初的世界收藏家,然后似乎没有正确收集.
然而,运行jprofiler,"运行GC"按钮似乎很好地清理内存而不是显示增加的占用空间,但由于我无法将jprofiler直接连接到生产盒,并且解决已证实的热点似乎无法正常工作我是留下了调整垃圾收集盲人的伏都教.
我尝试过的:
不幸的是,问题也偶尔会出现,它似乎是不可预测的,它可以运行几天甚至一周而没有任何问题,或者它可以在一天内失败40次,而且我唯一可以看到的是一致的是垃圾收集正在起作用.
任何人都可以提出以下建议:
a)为什么JVM在配置为最大值小于6时使用8个物理演出和2 gb交换空间
.b)对GC调整的引用实际上解释或给出了合理的示例什么样的设置使用高级集合.
c)对最常见的java内存泄漏的引用(我理解无人认领的引用,但我的意思是在库/框架级别,或者在数据结构中更像inherenet,比如hashmaps).
感谢您提供的任何和所有见解.
编辑
Emil H:
1)是的,我的开发集群是生产数据的镜像,直到媒体服务器.主要的区别是32/64bit和可用的RAM量,我无法轻易复制,但代码和查询和设置是相同的.
2)有一些遗留代码依赖于JaxB,但在重新排序作业以试图避免调度冲突时,我通常会删除执行,因为它每天运行一次.主解析器使用调用java.xml.xpath包的XPath查询.这是一些热点的来源,其中一个查询没有被预编译,两个对它们的引用都是硬编码的字符串.我创建了一个线程安全缓存(hashmap),并将对xpath查询的引用考虑为最终的静态字符串,从而显着降低了资源消耗.查询仍然是处理的很大一部分,但应该是因为这是应用程序的主要责任.
3)另外一个注释,另一个主要消费者是来自JAI的图像操作(从饲料中重新处理图像).我不熟悉java的图形库,但从我发现它们并没有特别漏洞.
(感谢目前为止的答案,伙计们!)
更新:
我能够使用VisualVM连接到生产实例,但它已禁用GC可视化/运行GC选项(尽管我可以在本地查看).有趣的是:VM的堆分配服从JAVA_OPTS,并且实际分配的堆正好坐在1-1.5 gigs,并且似乎没有泄漏,但是盒级监控仍显示泄漏模式,但它是没有反映在VM监控中.这个盒子上没有别的东西在跑,所以我很难过.
我倾向于编写相当大的模板化标头C++库,我的用户通常会抱怨编译时间.在想到这件事之后,我突然意识到我不知道时间会在哪里.是否有一些简单的方法来使用常见的编译器(例如g ++,icc和xlC)来分析C++编译过程?例如,是否可以了解在C++编译的每个阶段花费了多少时间?
profiling ×10
performance ×3
c++ ×2
java ×2
profiler ×2
.net ×1
asp.net ×1
browser ×1
c# ×1
compilation ×1
eqatec ×1
javascript ×1
memory ×1
memory-leaks ×1
optimization ×1
php ×1
python ×1
testing ×1
vba ×1