假设有一个使用外部jar的应用程序x。
x使用datadog-api
记录指标,y也记录。
我想看看是否有可能记录仅针对jar的系统指标。罐子正在使用多少个gc周期?
使用system.gc
,我们可以找出整个应用程序在该主机上使用了多少个周期,但是特定的jar呢?
请澄清是否有人知道。
答案 0 :(得分:1)
组成应用程序的所有类均从同一“内存池”分配内存。尽管JVM可以知道失败的内存分配请求的站点(例如类/方法/行)(并导致GC),但它不知道或不知道类对GC负责。
可能是x
分配了eden中99.99%的可用内存,然后y
中的一些代码出现了,试图分配一些字节,随后出现了GC。 y
真的对GC负责吗?
如果要确定哪些类负责使用大量堆的分配,则需要使用某种类型的探查器来运行代码。首先,您要查找分配最多的类,然后再从中分配这些类的位置。大概可以将分配方法的名称从后面映射到声明该方法的jar中。