面试官问你:你们系统接口慢,你怎么排查?很多人直接懵了。其实这考的就是接口耗时统计能力。今天教你6种方法,从入门到生产级,让你面试和实战都能拿捏!
这期内容我会从基础到高级,用图文并茂的方式,分享我在生产环境踩过的坑和实战经验。每种方案都是性能优化的利器,学完你就知道该在什么场景用什么方法。


为什么要统计接口耗时


先说为什么要统计接口耗时。
第一,这是性能优化的基石。没有耗时数据,你优化就是盲人摸象,根本不知道瓶颈在哪。
第二,这是监控告警的源头。通过耗时趋势,你能提前发现慢SQL、资源竞争这些隐藏问题。
第三,这是用户体验的晴雨表。响应时间直接影响用户满意度,毫秒级的延迟都可能让用户流失。
所以说,会统计耗时,是每个后端开发的必修课。


方法1 – System.currentTimeMillis()


第一种方法,System.currentTimeMillis(),这是最基础的。
逻辑很简单:记录开始时间,执行业务逻辑,记录结束时间,最后算个差值就行。
这个方法返回的是毫秒级时间戳,适合快速调试和本地测试,而且完全不需要任何第三方依赖。
优点就是简单易用、快速有效、零依赖。
但缺点也很明显:精度有限,而且会受系统时间影响。如果服务器时间被调整了,你的统计数据就不准了。另外代码侵入性比较强,每个方法都要手动加计时代码。
所以这个方法,我一般只在开发阶段用来快速定位问题。


方法2 – System.nanoTime()


第二种方法,System.nanoTime(),这是高精度版本。
它提供纳秒级的测量精度,专门用来计算时间间隔,而且不受系统时间调整的影响。
流程跟第一种类似,只不过精度更高,特别适合算法性能优化这种对时间要求很严格的场景。
优点是纳秒级精度,不受时钟同步影响。
缺点是需要做单位转换,而且代码侵入性还是存在。
如果你要优化一个复杂算法,需要精确到微秒级别,那就用这个方法。但日常接口统计,其实第一种就够了。


方法3 – Spring AOP切面


第三种方法,Spring AOP切面,这个就开始专业了。
它的核心思想是面向切面编程,关注点分离。你先定义一个自定义注解,比如叫TimeCost,然后编写切面拦截逻辑,最后在需要统计的方法上加这个注解就行。
整个过程通过动态代理自动拦截执行,业务代码完全零侵入。
优点非常明显:无侵入、解耦优雅、统一管理。你想统计哪个方法,加个注解就完事。
缺点是只能用在Spring Bean上,而且有一定的代理开销。
这个方法我在公司项目里用得最多,特别适合需要统计多个Service方法耗时的场景。面试的时候你要是能说出AOP这个方案,基本就能体现你的技术深度了。


方法4 – 拦截器Interceptor 


第四种方法,拦截器Interceptor,这是Spring MVC专用的。
它的工作流程是:在preHandle里记录开始时间,然后Controller执行,视图渲染,最后在afterCompletion里计算耗时。
拦截器能拦截Controller层的所有请求,而且可以获取HTTP上下文信息,比如请求路径、参数这些。
优点是特别适合Web层优化,能获取到请求的详细信息,而且轻量高效。
缺点是只能统计Web请求,不能统计Service层的方法。另外统计的时间包括了视图渲染,如果你只想统计业务逻辑耗时,这个就不太合适。
这个方法适合做全局的接口监控,比如你想看看所有Controller接口的响应时间,用拦截器最方便。


方法5 – 过滤器Servlet Filter 


第五种方法,过滤器Servlet Filter,这个更底层。
Filter是Servlet规范的标准组件,它位于整个请求处理链的最外层。
工作流程是:Filter开始记录时间,然后过滤器链执行,接着拦截器和Controller执行,最后Filter计算总耗时。
它统计的是完整的请求生命周期,而且兼容所有Java Web容器。

同样做性能优化,为什么他能精准统计接口耗时?
优点是底层全链路统计,符合标准规范,高效稳定。
缺点是统计的时间包含了所有过滤器的执行时间,粒度比较粗。
如果你想监控整个系统的请求响应时间,包括安全过滤、编码过滤这些,用Filter最合适。但如果只想看业务逻辑耗时,还是用AOP更精准。


方法6 – Micrometer & APM工具


第六种方法,Micrometer和APM工具,这是生产级的专业方案。
Micrometer是一个度量门面框架,你集成依赖之后,它会自动采集指标数据,然后暴露Prometheus端点,最后通过Grafana做可视化展示。
它支持分布式链路追踪,提供聚合统计,还能对接Prometheus、SkyWalking这些监控平台。
优点是性能开销低,支持分布式环境,功能非常丰富。
缺点是配置相对复杂,需要基础设施支持,比如要搭建Prometheus和Grafana。
但是,如果你的系统已经上生产了,强烈建议用这种方案。因为它不仅能统计耗时,还能监控CPU、内存、线程池这些指标,是一套完整的可观测性解决方案。
面试的时候如果你能说出Micrometer或者SkyWalking,面试官会觉得你有生产经验,这是加分项。


总结对比 


好,6种方法讲完了,我给你总结一下怎么选。
开发测试阶段,用AOP或者拦截器,方便快捷。
生产环境,必须上Micrometer或者APM工具,专业可靠。
如果需要高精度统计,比如优化算法,用nanoTime。
如果要统计全链路,包括过滤器这些,用Filter。
记住几个最佳实践:只统计关键接口,不要所有接口都统计,会影响性能。结合日志和指标一起看,数据更全面。设置耗时告警,超过阈值自动通知。优先选择无侵入的方案,代码更优雅。
工具推荐的话,中小项目用Micrometer就够了,大型分布式系统用SkyWalking,可视化用Grafana,告警用AlertManager。


记住一句话:度量是改进的开始,优化是卓越的阶梯。持续观察,持续进步!

#artContent img{max-width:656px;} #artContent h1{font-size:16px;font-weight: 400;}#artContent p img{float:none !important;}#artContent table{width:100% !important;}