对于具有相同请求性能问题的应用程序的多次执行,响应时间是不同的

时间:2010-04-07 11:30:25

标签: java performance

我的java应用程序功能是提供参考数据(基本上将大量数据从xml文件加载到hashmap中),因此我们从基于id的hashmap请求一个这样的数据,并且我们有这样的多个具有不同组的映射业务数据。问题是当我尝试多次执行相同请求的java应用程序时,响应时间不同,如31ms,48ms,72ms,120ms,63ms等。因此,最小和最大时间之间存在相当大的差距。执行完成。理想情况下,我希望响应时间为63毫秒,65毫秒,61毫秒,70毫秒,61毫秒,但在我的情况下,同一请求的响应时间的变化是巨大的变化。我曾使用开源配置文件来了解是否有任何额外的方法执行或内存泄漏,但根据我的理解,没有问题。请告诉我原因可能是什么,以及如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

可能有很多原因:

  • 每次运行都会重新启动Java应用程序吗?如果没有,可能是垃圾收集器在不幸的时候开始。如果是这样,JVM启动时间可能是变化的原因。

  • 该机器上还有其他什么东西在运行吗?

  • 在某些情况下,磁盘缓存是否“预热”,但在其他情况下却没有?也就是说,最近是否访问过这些文件,以便它们仍在内存中?

  • 如果这是联网的应用程序,测量期间是否有任何网络活动?

  • 如果涉及远程机器(例如数据库服务器或文件服务器),上述内容是否也适用于该机器?

使用分析器找出哪些代码对时间的变化负责。

答案 1 :(得分:0)

如果您没有运行实时系统,那么您无法确定它是否会在一定时间内执行。

操作系统经常做其他事情,主要是家务管理任务,并为系统提供其他服务。这很容易使系统的其余部分减速50ms。

还有一段时间你需要等待IO。如硬盘或网络通信。

除此之外,还有一个事实是你的JVM没有做任何实时的承诺。这可能意味着垃圾收集器通过。这对普通应用程序的影响非常小,但如果您创建并忘记大量对象(如加载许多或大型文件时可能会这样),则效果会很大。

最后它可以是你的算法(你每次都运行相同的数据吗?)如果你有不同的数据,你可以有不同的执行时间。