预测 Java 组件的内存消耗



我目前正在开发一个运行多个组件的事件驱动系统。最近,我收到了一个紧急的要求,即确定正在运行的java组件的内存消耗,以便我们可以在将内存需求部署到UAT/客户生产环境之前简要介绍内存需求。

我们是否有任何 API 可以使用它来计算深度保留大小,或者可以提供可以使用公式来计算内存需求。

对此的任何想法肯定会有所帮助。

我已经看到一些API(java仪器API(可以计算浅大小,但这还不足以满足我的需要。 我还发现了java Assist,使用它可以在运行时修改java字节代码。

要确定 Java 应用程序的内存消耗,可以使用探查器。 在 jdk 6 或更高版本中,您可以找到 jvisualvm (https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jvisualvm.html(。

使用 jvisualvm,您可以附加到 Java 进程,并且在采样器选项卡中,您可以看到按类类型分组的内存消耗。 甚至还有其他强大的分析器(JProfiler就是其中之一(

启用垃圾回收日志记录并分析日志。作为奖励,您还可以识别(并修复(异常行为。

要启用 gc 日志记录,请使用以下标志:

-详细:GC -XX:+打印GCDetails -XX:+打印GCDateStamps -XX:+印刷分配 -XX:+打印GCCause -Xloggc:/gc-%t.log

然后可以在许多工具中处理此日志文件,例如JClarity的Censum或上传到 https://gceasy.io/以便于分析。请注意,您将看到应用程序的整个内存消耗,而不是细分。为此,您必须使用上面提到的VisualVM之类的东西。

相关内容

  • 没有找到相关文章

最新更新