我有兴趣找到衡量我正在研究的Java Web服务中方法执行时间的最佳方法。
该服务将部署到多个客户端,因此可以在多个不同的生产环境中运行(客户端往往根据需求设置不同的设置),并且已决定服务应记录处理请求的执行时间以提供一些表明可能的性能问题。
到目前为止,我见过的大多数建议(例如here& here)都是在我感兴趣的代码的开头和结尾使用System.currentTimeMillis()
并且计算经过的时间,但对于生产环境来说,这真的是解决这个问题的最佳方法吗?
测量方法执行时间System.currentTimeMillis()
的适用程度是否合适,还有其他选择吗?
编辑0:为了澄清,一个关键要求是应该将此执行度量部署为标准部署的一部分以收集数据,以便在与性能相关的支持问题时可以参考提出,因为该服务构成了新旧组件的复杂系统的一部分
答案 0 :(得分:2)
您可以使用Spring Framework的“StopWatch”类:
您甚至可以使用AOP,这样您就可以在不更改代码的情况下分析代码
答案 1 :(得分:1)
记录过去的时间很好,但您需要在客户端计时才能真正了解它需要多长时间。这将另外告诉您在数据传输上花费了多少时间,这可能表明存在I / O瓶颈。
答案 2 :(得分:1)
System.currentTimeMillis()适用于您的应用程序执行时间超过1或2毫秒(尽管其精度可能大于ms,具体取决于您的操作系统)。
您可能更喜欢使用System.nanoTime(),它可以更精确,但不是纳秒。请注意,它的精确度还取决于您的基础系统。
这两种方法都是相当低级的(需要您管理时间戳),但开销要低于更高级别的API。