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

JVM performance bottomed out overnight. What happened?

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

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

第一个想法可能是我更改了一些东西并引入了低效的代码,但我注释掉的代码比我昨晚 运行ning 的代码大得多,性能仍然很糟糕。此时程序除了在主循环中读取文件外几乎什么都不做,并且仍然缓慢地读取它们。

我有一个同事 运行 在他自己的机器上安装了 jar 的全功能版本,他看到了我昨晚看到的 100k/s 性能基准,所以我只能假设有什么问题我的 JVM/workstation.

关于我应该看什么的任何想法或想法?当我已经知道现有的 JVM 完全有能力完成这项任务时,我犹豫是否要进行 JVM 性能调优。我只是不明白从昨晚开始发生了什么变化。

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

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

Perhaps毕竟我会研究 JVM 调优,只是为了确保我有一致的体验。

问题似乎已解决。

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

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

-server -Xmx4096m -Xms4096m

我添加了服务器标志,因为这是一个 long-running 进程,我不关心 start-up 时间,内存参数应该为 JVM 提供稳定的静态 4GB要使用的内存。

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