JVM性能一夜之间触底.发生了什么



我不是Java开发人员,但我发现自己今天戴着这顶帽子,所以请耐心等待。

当我昨晚停止使用文件解析器时,我看到了每秒10万条记录的基准测试——我对此非常满意。今天早上,当我对相同的文件重新运行相同的代码时,我每秒只看到10-12k条记录。

最初的想法可能是我更改了一些内容,引入了效率低下的代码,但我已经注释掉了比昨晚运行的代码更大的部分,性能仍然很差。在这一点上,程序除了读取主循环中的文件之外几乎什么都不做,并且读取速度仍然很慢。

我让一位同事在他自己的机器上运行jar的全功能版本,他看到了我昨晚看到的100k/s性能基准测试,所以我只能假设我的JVM/工作站出了问题。

对我应该看什么有什么想法或想法吗?当我已经知道普通JVM完全有能力完成这项任务时,我犹豫是否要进行JVM性能调优。我只是不明白自从昨晚以来发生了什么变化。

编辑:我已经重新启动了机器。

第二版:现在是第二天。我启动了我的笔记本电脑并运行了代码,它回到了最初的位置——100k/ps。我昨天检查了Windows的性能监视器,它没有显示异常数量的CPU、RAM或磁盘I/O,所以我真的不知道为什么会发生这种情况。

也许我会研究JVM调优,哪怕只是为了确保我有一个一致的体验。

问题似乎已经解决。

自从发布后,我做了一件事,就是删除Windows页面文件,以防这是一个页面问题。它帮助了我,但没有我需要的那么多。

似乎产生最大影响的是在JVM启动时将相当大的内存用于JVM。我猜想JVM可能一直在努力动态地分配足够的内存。我现在用以下参数运行它:

-server -Xmx4096m -Xms4096m

我添加了服务器标志,因为这是一个长时间运行的进程,我不关心启动时间,内存参数应该为JVM提供一个稳定、静态的4GB内存。

从那以后,我再也没有遇到过任何性能问题。

最新更新