一个 java web api,耗时 2s,但是db 300ms 就返回了,时间到底耗费在哪里呢。
当我最终定位下来,是因为db 返回了5M数据跨局域网传输大概需要 1s,导致的。
一行行跟踪源码,很耽误时间。
后来遇到了IDEA Profiler (IDEA IDE 自带的性能分析工具),简直太好用了。
https://www.jetbrains.com/pages/intellij-idea-profiler/
放几个截图:
IDEA 直接展示了某一个函数的执行时间,进入这个函数,又可以看到函数内部哪里最耗时。通过这种方式,1 分钟就能定位到问题。
注意:右侧可以切换是显示 cpu 时间,还是总时间(包含网络 IO、磁盘 IO 、内存读取时间)。
点击左侧的2284ms,可以看到call.execute()
耗时 481ms,而parserResponse
花费 1800ms