1

我有一个在 Eclipse (Indigo) 和 Javd 1.7x 下运行的网络线程应用程序。很长一段时间以来,我注意到应用程序的第一次运行导致前端和后端加载性能下降,例如,如果我要加载应用程序,然后用 100 个网络数据包击中它(使用测试工具)前几个反应非常不稳定,最后几个反应。[编辑]无需卸载应用程序,只需再次运行测试工具,应用程序即可正常运行。[结束编辑]

我决定尝试深入了解它并加载 VisualVM 1.3.5 来分析行为。CPU 使用率在运行开始时有一个明显的峰值,从 10% 上升到 50% 以上。在峰值之后,一切看起来都正常,并且如上所述,后续运行在 CPU 利用率中没有领先的峰值,后续运行的配置文件与第一次运行的峰值之间的配置文件相同。似乎没有任何证据表明线程数导致它,但有小幅上升。堆空间从 100MB 增加到 200MB,但除此之外一切正常。

任何想法都会受到欢迎。

谢谢

4

2 回答 2

0

这对于 OSGi 环境很典型,其中捆绑包可能会在首次访问捆绑包类或服务时延迟初始化。

-console -consolelog您可以通过使用参数启动 eclipse 来确定您的场景是否属于这种情况。

当控制台打开并加载应用程序时,发出ss命令并注意哪些包被标记为 LAZY。ss然后,运行您的测试,再次发出,并查看其中一个 LAZY 捆绑包现在是否已激活。如果是这样,您可以通过 configuration/config.ini 文件强制急切启动您的包。这也可以通过IStartup扩展点来完成。

于 2012-12-06T12:54:08.447 回答
0

第一次运行测试时系统性能不稳定是相当典型的。这是由于操作系统从磁盘读取库、JAR 文件和其他数据并将其存储在缓存中。一旦完成,第一次所有后续运行将更快,更一致。

另外,请记住,JVM 在启动后也会变得更慢。由于其热点分析和即时编译,在 JVM 为您的特定工作负载优化字节码之前,代码需要运行一段时间。

于 2012-12-05T06:07:03.613 回答