第 9 章 配置 JVM 设置

Java Virtual Machine (JVM) 设置对于独立服务器和受管域里的 JBoss EAP 服务器是不同的。

对于 JBoss EAP 独立服务器实例,服务器启动进程在启动时将 JVM 设置传入 JBoss EAP 服务器。在启动 JBoss EAP 前,您可以从命令行声明或者使用管理控制台里的 System Properties 屏幕。

在受管域里,JVM 设置可以在 host.xmldomain.xml 配置文件里进行声明,而且在主机、服务器组和服务器级别进行配置。

注意

系统属性必须在 JAVA_OPTS 里进行配置以在启动时为 JBoss EAP 模块(如 logging manager)所用。

9.1. 配置独立服务器的 JVM 设置

独立的 JBoss EAP 服务器实例的 JVM 设置可以在启动服务器前设置 JAVA_OPTS 环境变量进行声明。

下面是在 Linux 上设置 JAVA_OPTS 环境变量的例子。

$ export JAVA_OPTS="-Xmx1024M"

在 Microsoft Windows 环境里可以使用相同的设置:

set JAVA_OPTS="Xmx1024M"

或者,JVM 设置可以添加到 EAP_HOME/bin 里的 standalone.conf 文件,它包含了传递给 JVM 的选项示例。

警告

设置 JAVA_OPTS 环境变量将覆盖 standalone.conf 的默认值,这可能导致 JBoss EAP 的启动问题。

9.2. 为受管域配置 JVM 设置

在 JBoss EAP 受管域里,您可以在多个级别定义 JVM 设置。您可以在特定主机上定义自定义 JVM 设置,然后应用这些设置到服务器组,或者单独的服务器实例。

在默认情况下,服务器组和单独的服务器将从父服务器继承 JVM 设置,但您可以选择在每个级别都覆盖 JVM 设置。

注意

domain.conf 里的 JVM 设置应用到 JBoss EAP 主机控制器而不是该主机控制器控制的单独 JBoss EAP 服务器实例的 Java 进程。

9.2.1. 在主机控制器上定义 JVM 设置

您可以在主机控制器上定义 JVM 设置,然后应用这些设置到服务器组或单独的服务器。JBoss EAP 附带一个 default JVM 设置,但下面的管理 CLI 命令演示了创建名为 production_jvm 的带有一些自定义 JVM 设置和选项的新的 JVM 设置。

/host=HOST_NAME/jvm=production_jvm:add(
    heap-size=2048m,
    max-heap-size=2048m,
    max-permgen-size=512m,
    stack-size=1024k,
    jvm-options=["-XX:-UseParallelGC"]
)

您也可以在管理控制台里创建和编辑 JVM 设置,选择 Runtime 标签页,然后选择 Hosts 并点击要编辑的主机上的 JVM

这些设置存储在 host.xml 里的 <jvm> 标签下。

9.2.2. 应用 JVM 设置到服务器组

当创建服务器组时,您可以指定组里所有服务器将使用的 JVM 配置。下面的管理 CLI 命令演示了创建名为 groupA 的服务器组,它使用之前例子里展示的 production_jvm JVM 设置。

/server-group=groupA:add(profile=default, socket-binding-group=standard-sockets)
/server-group=groupA/jvm=production_jvm:add()

服务器组里的所有服务器将从 production_jvm 继承 JVM 设置。

您也可以覆盖服务器组级别的专有 JVM 设置。例如,要设置不同的堆大小,您可以使用下列命令:

/server-group=groupA/jvm=production_jvm:write-attribute(name=heap-size,value="1024m")

应用上述命令后,服务器组 groupA 将从 production_jvm 继承 JVM 设置,除了堆大小被覆盖为 1024m

您也可以在管理控制台里编辑服务器组的 JVM 设置,选择 Runtime 标签页,然后选择 Server Groups 并点击 View 来编辑服务器组。

这些服务器组的设置保存在 domain.xml 里。

9.2.3. 应用 JVM 设置到单独的服务器

在默认情况下,单独的服务器实例将从所属的服务器组继承 JVM 设置。然而,您可以选择用主机控制器的其他完整 JVM 设置覆盖继承的设置,或者选择覆盖具体的 JVM 设置。

例如,下面的命令覆盖了之前例子里的服务器组的 JVM 定义,并把 server-one 的 JVM 设置设为 default JVM 定义:

/host=HOST_NAME/server-config=server-one/jvm=default:add()

和服务器组相似,您也可以在服务器级别覆盖具体的 JVM 设置。例如,要设置不同的堆大小,您可以使用下列命令:

/host=HOST_NAME/server-config=server-one/jvm=default:write-attribute(name=heap-size,value="1024m")

您也可以在管理控制台里编辑服务器 JVM 设置,选择 Runtime 标签页,然后选择 Hosts 及相关的主机,并点击 View 来编辑服务器。

这些单独服务器的设置保存在 host.xml 里。

9.3. 显示 JVM 状态

您可以通过管理控制台查看独立服务器或受管域服务器的 JVM 资源的状态,如堆和线程的使用情况。虽然这些统计数据不是实时显示,但您可以点 Refresh Results 来查看 JVM 资源的最新数据。

要显示独立 JBoss EAP 服务器的 JVM 状态:

  • 选择 Runtime 标签页,然后选择 Standalone Server。在 Monitor 列里选择 JVM,然后点击 View

要显示受管域里 JBoss EAP 服务器的 JVM 状态:

  • 选择 Runtime 标签页,然后选择您要查看的服务器组和服务器。在 Monitor 列里选择 JVM,然后点击 View

它显示了堆的以下使用信息:

Max
可以用于内存管理的最大内存数量。
Used
已使用的内存数量。
Committed
已提交 JVM 使用的内存数量。

其它信息(如 JVM 在线时间和线程使用情况)也可以获得。

9.4. 指定 32 位或 64 位 JVM 架构

在某些环境里,如 Hewlett-Packard HP-UX 和 Solaris,您可以使用 -d32-d64 参数来指定运行在 32 位还是 64 位 JVM 里。如果没有指定则默认为 32 位。

为独立服务器指定 64 位架构

  1. 打开 EAP_HOME/bin/standalone.conf
  2. 添加下列内容,将 -d64 选项附到 JAVA_OPTS 后面。
JAVA_OPTS="$JAVA_OPTS -d64"

为受管域指定 64 位架构

当运行在受管域时,除了服务器实例之外,您可以为主机和进程控制器指定 64 位环境。

  1. 设置运行在 64 位 JVM 里的主机和进程控制器。

    1. 打开 EAP_HOME/bin/domain.conf
    2. 添加下列行以将 -d64 选项附到 JAVA_OPTS 后面。请确保是在设置 PROCESS_CONTROLLER_JAVA_OPTSHOST_CONTROLLER_JAVA_OPTS 之前插入这些内容的。

      JAVA_OPTS="$JAVA_OPTS -d64"

      domain.conf 里的 JVM 选项示例

      #
      # Specify options to pass to the Java VM.
      #
      if [ "x$JAVA_OPTS" = "x" ]; then
        JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
        JAVA_OPTS="$JAVA_OPTS -Djboss.modules.policy-permissions=true"
        JAVA_OPTS="$JAVA_OPTS -d64"
      else
        echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
      fi

  2. 设置运行在 64 位 JVM 里的服务器实例。

    -d64 作为 JVM 选项添加至 JVM 配置。下面的命令展示了将其添加到 default JVM 配置。

    /host=HOST_NAME/jvm=default:add-jvm-option(jvm-option="-d64")