1

上次有人提到说下剖析工具。所以再来聊聊代码级剖析工具。
不管怎么吹,代码级剖析工具对性能本身的损耗都是存在的。
并且损耗还不小。即使是在偏底层做,也照样有很大的损耗。20-30%损耗都是正常的。

要找好代码级工具的切入点,一开始就用肯定是不理智。只要分析到了某一个具体的进程或线程,或者已经有了可疑代码的具体方法,再上代码级剖析工具就更有目的性了。

JAVA方向:对JAVA来说,代码级的剖析工具有好多。自带的就有不少,像现在SUN JDK中的jvirtualVM就可以实时看CPU和内存在一个方法和对象上的消耗。还有jstack/jmap等工具可辅助。如果不想实时看,做下dump也可以看内存的占用。但是要想看方法调用时间就比较费劲一点。不过现在有不少的商业工具,比如说jprofiler,这工具直到现在还是我所见到的在java剖析中功能最全面的工具(它是商业的)。

不仅有树结构,还有调用图。

建议大家尽量找到可替代的适合的开源工具。

C/C++方向:在这个方向上,其实不止有专门的代码级剖析工具,像valgrind, google perftools。也有系统级的调试工具可以用。各种的trace工具,像perf/systemtap/oprofile之类的也都可用,并且内核级工具损耗要小一些。在solaris上有Dtrace,那本《性能之颠》的书里几乎全是Dtrace工具的例子。 并且这些工具还能生成火焰图、热力图之类的。

在其他语言上也有相应的剖析工具可用。像PHP有 Xdebug、xhprof;python有cprofile、memoryprofiler、lineprofiler;.net有CLR profiler;Go语言有pprof(这个是移植过来的,google perf中的工具更多)。
不管是什么语言,几乎类似的工具都存在的。有了这些工具,再加上系统级的调试工具,找到代码级性能问题就是分分钟的事。

当然,还是要强调人的思考能力在社会进步中的重要性,千万不要拿着榔头打枣,够不够得着不说,举一会也够累的。适合的工具最重要。


ZeeBJ
7 声望4 粉丝