Java 我们如何检查JVM使用内存和CPU的过去记录

Java 我们如何检查JVM使用内存和CPU的过去记录,java,jvm,Java,Jvm,我想写一个网站管理工具。在其中,我想用图表显示网站的内存使用情况和CPU使用情况。我在某处读到JVM将这些数据写入一个转储文件,MAT工具使用该文件来显示结果。所以我的问题是JVM将这个文件转储到哪里,转储速率是多少 因为我想在图表上显示最近24小时的使用情况。因此,我们如何才能捕获这些数据 正在寻求帮助,如果您需要历史数据,必须自己记录。使用VisualVM连接时,始终从连接点开始 MAT工具可用于检查堆转储。它只在内存快照上工作,使用IMHO很痛苦。目前JVM中没有任何固有的东西可以生成您想

我想写一个网站管理工具。在其中,我想用图表显示网站的内存使用情况和CPU使用情况。我在某处读到JVM将这些数据写入一个转储文件,MAT工具使用该文件来显示结果。所以我的问题是JVM将这个文件转储到哪里,转储速率是多少

因为我想在图表上显示最近24小时的使用情况。因此,我们如何才能捕获这些数据


正在寻求帮助,如果您需要历史数据,必须自己记录。使用VisualVM连接时,始终从连接点开始


MAT工具可用于检查堆转储。它只在内存快照上工作,使用IMHO很痛苦。

目前JVM中没有任何固有的东西可以生成您想要的数据流。你可以将诸如JVisualVM之类的分析器挂接到你的应用程序上,但这也可能会大大降低它的速度(也就是说,对于内存评测来说,它并不那么糟糕……取决于你应用程序的非功能性需求)

还有两种选择:

使用MBean编写自己的代码 在ScheduledExecutorService中,运行一个周期性进程,该进程通过。您可以生成可以在MAT中查看的堆转储

使用cron和jmap
您还可以使用生成堆转储,并在操作系统级别将其计划为每隔一段时间运行一次。如果您不想或不能更改代码,这可能会更好。

Jmap看起来更有希望,但它只提供内存使用率。我还想要CPU使用率。同样的,也请帮助我。