【问题标题】:Linux RHEL6 allocates more memory to run java programLinux RHEL6 分配更多内存来运行 java 程序
【发布时间】:2012-12-21 23:40:15
【问题描述】:

在我的新 rhel62 机器上运行我的 java 应用程序需要更多内存。相同的程序在 rhel55 上占用的内存更少。

我编写了一个非常简单的“HelloWorld”java 程序,并运行它。这在 rhel62 中也需要大量内存。我在 Rhel55 和 Rhel62 中都使用 Java_1.7

import java.io.* ;
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
        Console console = System.console();
        String input = console.readLine("Enter ...:");
        System.out.println(input);
    }
}
$ /usr/java/jdk1.7.0_09/bin/javac hello.java
$ /usr/java/jdk1.7.0_09/bin/java HelloWorldApp
Hello World!
Enter ...:

顶级命令上的 Java 应用程序

rhel62: Linux qatestp 2.6.32-71.el6.x86_64 #1 SMP Wed Sep 1 01:33:01 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5069 qaatestp  20   0 5557m  18m 7604 S  0.0  0.1   0:00.11 java
31719 qaatestp  20   0  105m 1972 1468 S  0.0  0.0   0:00.35 bash

rhel55: Linux qa2testp 2.6.18-238.5.1.el5 #1 SMP Mon Feb 21 05:52:39 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18065 qa2testp  17   0 2400m  14m 7508 S  0.0  0.2   0:00.22 java
17244 qa2testp  15   0 66196 1784 1232 S  0.0  0.0   0:00.81 bash

我不知道为什么这在 rhel62 中会这样,因此我面临着不必要的问题。这是 Linux rhel6.2 问题吗?或 Java 问题?或没有问题? :)

在询问支持团队之前,我想在这里提出这个问题。请给点建议?

【问题讨论】:

  • Java程序通过java虚拟机运行,虚拟机在两个linux版本中都在分配内存(虚拟机的内存使用取决于java虚拟机的配置)

标签: java linux


【解决方案1】:

您不应该仅仅通过查看VIRT 列来快速判断 - 它只是意味着分配了这么多的虚拟内存。这个虚拟内存可能永远不会被实际访问。

但是,请密切注意RES(驻留)和SHR(共享)内存列。在您的情况下,差异并不大:驻留内存只有 14MB 和 18MB,共享内存基本相同。

【讨论】:

    【解决方案2】:

    Java 默认设置的最大堆大小是启动时主内存大小的 1/4。您拥有的内存越多,它在启动时允许的虚拟内存就越多。请注意,这并不意味着它会使用更多的常驻内存,但通常意味着它会。

    猜测一下,您的旧机器有 12 GB,而新机器有 24 GB。

    【讨论】:

      【解决方案3】:

      非常感谢您的回复。

      这是因为在 Rhel6 上进行了内存分配更改。 RHEL6 为每个线程分配单独的内存块。在多核处理器中,这将提高性能,但会增加内存开销。 有一个环境变量 MALLOC_ARENA_MAX,将此值设置为 1 会减少此内存分配。请参阅以下链接了解更多详情。

      Linux glibc >= 2.10 (RHEL 6) malloc may show excessive virtual memory usage

      谢谢

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多