第 16 章 JVM
16.1. 关于 JVM
16.1.1. 关于 JVM 设置
对于受管域和独立服务器实例,Java 虚拟机(JVM)设置是不同的。在受管域里,JVM 设置是在
host.xml
和 domain.xml
配置文件里声明的,由负责启动和停止服务器进程的域控制器组件确定。而在独立服务器实例里,服务器的启动过程可以传入命令行参数。这可以通过命令行或管理控制台的 System Properties 屏幕里进行声明。
受管域
受管域的一个重要特征是可以定义多级别的 JVM 设置。您可以在主机、服务器组、服务器实例级别配置定义 JVM 设置。您可以用更专用的子元素覆盖父配置,这允许声明专有的服务器配置而无需在组或主机级别进行排除。这也允许其他级别继承父配置,直至在运行时传入或在配置文件里声明设置。
例 16.1. 域配置文件里的 JVM 设置
下面的例子展示了
domain.xml
配置文件里的服务器组的 JVM 声明。
<server-groups> <server-group name="main-server-group" profile="default"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="standard-sockets"/> </server-group> <server-group name="other-server-group" profile="default"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="standard-sockets"/> </server-group> </server-groups>
在这个例子里,名为
main-server-group
的组声明了大小为 64MB 的堆,其最大堆大小为 512MB。属于这个组的任何服务器都将继承这些设置。你可以为整个组、为某个主机、或者单个服务器修改这些设置。
例 16.2. 主机配置文件里的域设置
下面的例子展示了
host.xml
配置文件里的服务器组的 JVM 声明。
<servers> <server name="server-one" group="main-server-group" auto-start="true"> <jvm name="default"/> </server> <server name="server-two" group="main-server-group" auto-start="true"> <jvm name="default"> <heap size="64m" max-size="256m"/> </jvm> <socket-bindings port-offset="150"/> </server> <server name="server-three" group="other-server-group" auto-start="false"> <socket-bindings port-offset="250"/> </server> </servers>
在这个例子里,名为
server-two
的服务器属于 main-server-group
服务器组,它继承了 default
JVM 组的设置。在前面的例子里,main-server-group
的主要堆大小是 512MB。通过声明更小的最大堆尺寸为 256MB,server-two
可以覆盖 domain.xml
设置来按需要调整性能。
运行时的独立服务器设置
独立服务器实例的 JVM 设置可以在启动服务器前通过设置 JAVA_OPTS
环境变量来声明。下面是在 Linux 命令行里设置 JAVA_OPTS
环境变量的例子:
[user@host bin]$ export JAVA_OPTS="-Xmx1024M"
相同的设置可以用于 Microsoft Windows 环境,如:
C:\> set JAVA_OPTS="Xmx1024M"
或者,可以将 JVM 设置添加到
EAP_HOME/bin
目录下的 standalone.conf
文件里,它包含了传入 JVM 的选项示例。
警告
设置 JAVA_OPTS 环境变量将重新定义 JAVA_OPTS 的默认值。这可以打断或终止 EAP 的启动。
16.1.2. 在管理控制台里显示 JVM 状态
独立服务器或受管域的 Java 虚拟机(Java Virtual Machine,JVM)状态都可以在管理控制台里显示。控制台显示了服务器的堆、线程的使用情况。虽然统计数据并非实时显示的,但您可以刷新控制台来显示 JVM 资源的最新状况。
JVM 状态包含下列数值。
类型 | 描述 |
---|---|
Max | 可以用于内存管理的最大内存数量。最大可用的内存数用浅灰色条显示。 |
Used | 已使用的内存数量,以深灰色的条显示。 |
Committed | JVM 可使用的内存数量,以深灰色条显示。 |
Init | JVM 从操作系统请求的用于内存管理的初始内存数量,以深灰色条显示。 |
过程 16.1. 在管理控制台里显示 JVM 状态
显示独立服务器实例的 JVM 状态
从屏幕顶部选择标签页。展开 菜单,然后展开 菜单。选择 。显示受管域的 JVM 状态
从屏幕顶部选择标签页。展开 菜单,然后展开 菜单。选择 。
- 受管域可以提供服务器组里的所有服务器实例的可视性,但它只允许您在服务器菜单里一次查看一个服务器。要查看服务器组里其他服务器的状态,请点击屏幕左边的以选择组里显示的主机和服务器。选择所需的服务器或主机,JVM 细节将相应改变。点击 完成。
结果
显示服务器实例的 JVM 设置的状态。
16.1.3. 配置 JVM
<jvm></jvm> 标签支持 <jvm-options></jvm-options>,它通过 <option value=""/> 标签来添加 JVM 配置参数。
例如
<jvm name="default"> <heap size="1303m" max-size="1303m"/> <permgen max-size="256m"/> <jvm-options> <option value="-XX:+UseCompressedOops"/> </jvm-options> </jvm>
用 CLI 配置 JVM
要用 CLI 配置 JVM,请使用以下语法:
# cd /server-group=main-server-group/jvm=default # :add-jvm-option(jvm-option="-XX:+UseCompressedOops") { "outcome" => "success", "result" => undefined, "server-groups" => undefined } # :read-resource # Expected Result: [domain@localhost:9999 jvm=default] :read-resource { "outcome" => "success", "result" => { "agent-lib" => undefined, "agent-path" => undefined, "env-classpath-ignored" => undefined, "environment-variables" => undefined, "heap-size" => "1303m", "java-agent" => undefined, "java-home" => undefined, "jvm-options" => ["-XX:+UseCompressedOops"], "max-heap-size" => "1303m", "max-permgen-size" => "256m", "permgen-size" => undefined, "stack-size" => undefined, "type" => undefined } }
删除 jvm-options 条目
要删除 jvm-options 条目,请使用下列语法:
# cd /server-group=main-server-group/jvm=default # :remove-jvm-option(jvm-option="-XX:+UseCompressedOops") # Expected Result: [domain@localhost:9999 jvm=default] :remove-jvm-option(jvm-option="-XX:+UseCompressedOops") { "outcome" => "success", "result" => undefined, "server-groups" => undefined }