【问题标题】:How to control the memory usage of processes spawned by a JVM如何控制由 JVM 生成的进程的内存使用情况
【发布时间】:2009-10-12 09:44:19
【问题描述】:

我正在编写一个创建 JVM 并需要控制由 JVM 生成的进程的内存使用的应用程序。

【问题讨论】:

  • “控制”是什么意思?请详细说明
  • 进程分配的确切内存?还是堆的 -Xmx 足够好?

标签: java memory controls process native


【解决方案1】:

您可以使用 JMX 连接到 JVM 进程以获取有关内存状态/分配的信息并引发垃圾收集。但您首先需要启用 JVM 的 JMX 监控:http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html。

【讨论】:

    【解决方案2】:

    我假设您说的是使用 Runtime.exec(...) 等生成的非 Java“进程”。

    答案是这是特定于操作系统的,而不是标准 Java 库支持的东西。但是,如果您要在 Linux(或 UNIX)中执行此操作,我可以想到三种方法:

    • 让 Java 通过 shell 包装脚本生成命令,该脚本使用 ulimit 内置来减少内存限制,然后 execs 实际命令;见man 1 ulimit。
    • 编写一个与 shell 包装器相同的小 C 命令。这将比包装脚本方法具有更少的开销。
    • 尝试对 JNI 和本机代码库执行相同的操作。不推荐,因为您可能需要复制 Process 和 ProcessBuilder 的行为,这可能非常困难。

    【讨论】:

      【解决方案3】:

      如果“控制”是指“限制到已知上限”,那么您可以简单地通过

      -Xms`lower_bound` 
      

      和

      -Xmx`upper_bound` 
      

      当你生成进程时到 vm 的参数。 see the approproate setting here

      【讨论】:

      • 问题不在于JVM堆内存,而是JVM产生的进程系统内存(独立进程)
      猜你喜欢
      • 2011-10-10
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2010-10-19
      相关资源
      最近更新 更多