【问题标题】:Memory Usage of of external tools in javajava中外部工具的内存使用情况
【发布时间】:2015-06-11 04:22:52
【问题描述】:

我有一些可执行工具。在我的 Java 应用程序中,我需要将它们中的每一个启动数百次,并根据不同的输入测量它们的内存消耗。我正在使用

Runtime.getRuntime().exec(externalToolCommand);

执行外部工具。但我不知道如何测量外部工具的最大内存使用量。 为了更清楚,我将举例说明; 假设我有 prism.exe、mrmc.exe 和 Plasma.exe,它们是三个可执行的外部工具。我想知道何时启动其中一种工具,例如prism.exe,它消耗了多少内存。我不需要测量我的 Java 应用程序内存消耗。我只需要知道外部内存消耗。 谢谢。

【问题讨论】:

  • 您需要使用 java 或启动 java 应用程序来跟踪内存消耗还是可以使用外部工具?
  • 在什么平台上?当您使用 Runtime.getRuntime().exec() 时,您就在 JVM 之外。
  • 我需要使用 Java 来启动外部可执行文件并测量每个工具的最大内存使用量。 @ozborn
  • 它将在 windows 和 linux 上运行 @ElliottFrisch
  • 那么我会使用外部工具,编写自己的代码来监控 JVM 外部的进程是没有意义的。

标签: java memory runtime.exec


【解决方案1】:

我不知道确切的代码,但这是我能想到的。在 Windows 上,您可以从 Java 应用程序启动一个批处理脚本,例如 p.bat,然后从 p.bat 启动一个 powershell 脚本,例如 q.ps1,现在您可以访问了到powershell脚本。您可以运行一个进程监控工具(我不知道可能是 perfmon ...)来测量它的一次内存消耗,将其记录在一个文本文件中。从脚本中终止进程。在您的 Java 应用程序中循环执行整个过程。最后,您获得了包含 n 次进程内存消耗的文件。
但当心!它真的很昂贵,因为它涉及文件 I/O、来回上下文切换、顶部流水线。

使用 powershell,可能性无穷无尽。但是我不是powershell专家,所以请原谅,我无法为您编写确切的代码。这个答案需要您对所涉及的各个步骤进行大量研究。

【讨论】:

  • 是的,不幸的是,这似乎是我将应用的唯一解决方案
  • @Memin :确实如此,这个问题确实需要关注以获得更好的答案。观看次数较少。
【解决方案2】:

试试“jvisualvm”,你可以在/bin/jvisualvm.exe找到它

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 2016-10-05
    • 2011-01-30
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2010-09-28
    相关资源
    最近更新 更多