(1) 即使日志只是序列化到内存中,可是它依然会影响不少性能。
(2) 即使性能没有受到严重影响,但是,在几十万的性能数据统计中,想要通过普通方式看出问题来,是比较困难的。如果使用平均值,显然是很难观察到波动的。
于是,需要有一种调试方式,即不影响性能,又能将数据可视化,一览于眼底。于是, 使用gnuplot将数据可视化成为一种比较好的解决方式。就如上图中的结果一样,这幅图横坐标表示的是运行某段代码的次序,纵坐标是耗时。从图上我们可以看出在运行到20000次左右时,发生了大量的波动。然后我们可以再细化分析这段代码,再把代码分成几段,再画图,直到找到问题。注:绿色的那条线是平均值。
我通常用的实施方法是:
(1) 将程序分成几段关键的代码,对分段进行计时,把每次运行花费的时间记入一个数组中,数组给的大一点,存个十万个或更多,数组循环使用。
(2) 在发生问题时,将数组的数据导出,再用gnuplot画成图。非常清晰。
(3) 通过观察图,找出问题所在。
第三步其实很重要,gnuplot画的图,只是让程序的所有性能点都一五一十的呈现在了你的面前,分析还是得靠自己。主要的技巧是你需要对图中的合理时间值有个估计,不然,当你看到每幅图时,你都有可能认为是合理的,也有可能认为是不合理的。
注:如果能用INTEL.VTUNE.PERFORMANCE能分析是好事,不过这些工具不是所有的机子都能运行,且有局限性。
联系客服