前段时间修改软件,解析后的网络数据需要排序后再进行输出。
软件功能修改完成之后,进行了一下测试。发现同样大小的一个文件,整个解析过程比原来长了两三倍,性能下降的太厉害。
究竟是哪里出了问题呢?究竟那部分代码这么耗费时间呢?
我仔细分析了一下代码的改动,总共有三个地方,分别是数据解析过程,文件块块内排序过程和输出结果时的整体排序。
于是,问题的排查思路就出来了。给这三个过程都加上计时,来检查时间究竟消耗在什么地方。
但即便有了思路,另外一个问题又出现了。数据的解析过程用到了mapreduce架构,直接进行计时输出是没办法输出到控制台的。于是我又写代码,把计时的结果存到文件。
经过排查,最终发现,时间消耗在文件块块内排序的过程。这里的排序我使用的是冒泡排序算法。经过对数据特点的分析,重新实现了排序的过程,终于把时间降到了之前的水平。
这次问题的解决,只花费了一个多小时的时间,非常有效。事后复盘整个问题排查的过程,发现这么高的效率,得益于在修改问题之前,对问题的精确定位。而对问题的精确的快速的定位,依赖的是对问题的分析。在动手解决问题之前,想清楚了整个过程,所以解决问题的时候效率很高。
反过来想想,如果当时没有仔细分析整个问题,而是看看这里改改那里,通过猜测和尝试来修改问题,那么肯定会花费更多的时间。