Java 使用yourkit进行内存分析所用的时间

Java 使用yourkit进行内存分析所用的时间,java,yourkit,Java,Yourkit,在150G机器上,评测一个大约100G内存消耗的java应用程序通常需要多长时间?我大约2小时前就开始分析了,到目前为止只完成了20%。自从我开始评测以来,jvm使用的总内存已经增加到150G(接近RAM大小)。 使用yourkit评测时,高内存进程占用大量时间是正常的还是我做错了什么。有没有可能因为内存已经到达RAM内存,大量的磁盘交换正在发生,这会减慢内存分析的速度。 如何使此过程更快。如果不可能使其更快,那么还有哪些方法可以调查java应用程序中的内存泄漏 你的JVM很大:) 如果您有一个

在150G机器上,评测一个大约100G内存消耗的java应用程序通常需要多长时间?我大约2小时前就开始分析了,到目前为止只完成了20%。自从我开始评测以来,jvm使用的总内存已经增加到150G(接近RAM大小)。 使用yourkit评测时,高内存进程占用大量时间是正常的还是我做错了什么。有没有可能因为内存已经到达RAM内存,大量的磁盘交换正在发生,这会减慢内存分析的速度。
如何使此过程更快。如果不可能使其更快,那么还有哪些方法可以调查java应用程序中的内存泄漏

你的JVM很大:)

如果您有一个正在运行的JVM,获取堆中对象相关信息的最快方法是获取jmap直方图:

jmap -histo:live <pid>
jmap-histo:live
它将打印堆中的所有活动对象(:live does a gc)、它们的实例数以及它们的(浅层)大小

当然,它不适合进行复杂的分析,但它通常足以让您找到泄漏,特别是如果泄漏很大:将直方图与泄漏前的直方图进行比较


请参阅位于的文档。

您可以尝试使用名为
Valgrind
的工具来检查Java应用程序中的内存泄漏。Valgrind在内存分析方面是否更快/更好?我不确定。但它可以实时分析内存泄漏的发生时间以及程序的哪个部分。所以在我的例子中,我看到字节数组、字符数组和字符串占用了大量内存,但我无法真正追溯到代码中负责这些内存的类。在这种情况下,工具包中的调用树工作得非常好。通常,在Java核心对象之后,您还会发现大量自己的对象。当然,这并不总是有效的,例如,如果您只有一个70GB的字节数组,或者如果只有一个对象包含一个包含10亿个字符串的数组。但它也经常起作用。