Java 虚拟机设置

使用此页面来查看和更改应用程序服务器的进程的 Java™ 虚拟机 (JVM) 配置设置。

要查看此管理控制台页面,请连接到管理控制台,然后浏览至“Java 虚拟机”面板。

[IBM i]对于 IBM® i 和分布式平台,单击 服务器> 服务器类型> WebSphere Application Server> server_name。 然后,在“服务器基础结构”部分中,单击 Java 和进程管理 > 进程定义 > Java 虚拟机

类路径

指定 Java 虚拟机代码在其中查找类的标准类路径。

如果需要将一个类路径添加到此字段,请将每个类路径条目输入到一个单独的表行中。 您不必在每个条目的末尾添加冒号或分号。

只应将用于指定下列项所在位置的类路径添加到此字段:
  • 用于系统的检查或监视工具。
  • 在此产品基础上运行的产品的 JAR 文件。
  • JVM 诊断补丁或修订。
如果将用于指定下列项所在位置的类路径添加到此字段,那么可能会发生处理错误:
  • 资源提供程序的 JAR 文件,例如 DB2®。 应将这些 JAR 文件的路径添加到相关提供程序类路径。
  • 您正在该产品上运行的一个或多个应用程序所使用的用户 JAR 文件。 应在需要此类型的 JAR 文件的每个应用程序或者在与服务器相关联的共享库中指定该文件的路径。
  • 扩展 JAR 文件。 如果需要将扩展 JAR 文件添加到系统,那么应使用 JVM 定制属性 ws.ext.dirs 来指定此 JAR 文件的绝对路径。 还可以将该 JAR 文件放入 WAS_HOME/lib/ext/ 目录中,但建议您还是使用 JVM 定制属性 ws.ext.dirs 来指定扩展 JAR 文件的路径。
信息
数据类型 字符串

引导类路径

指定 JVM 代码的引导程序类和资源。 此选项仅可用于支持引导类和资源的 JVM 指令。

如果需要将一个类路径添加到此字段,请将每个类路径条目输入到一个表行中。 您不需要在每个条目的结尾处添加冒号或分号。

如果需要将多个类路径添加到此字段,那么根据 JVM 所在的操作系统不同,可以使用冒号 (:) 或分号(;)将这些类路径分隔开。

只应将用于指定下列项所在位置的类路径添加到此字段:
  • 用于系统的检查或监视工具。
  • 在此产品上运行的产品的 JAR 文件。
  • JVM 诊断补丁或修订。
如果将用于指定下列项所在位置的类路径添加到此字段,那么可能会发生处理错误:
  • 资源提供程序的 JAR 文件。 例如 DB2。 应将这些 JAR 文件所在的路径添加到相关提供程序类路径。
  • 您正在该产品上运行的一个或多个应用程序所使用的用户 JAR 文件。 应在需要此类型的 JAR 文件的每个应用程序或者在与服务器相关联的共享库中指定该文件的路径。
  • 扩展 JAR 文件。 如果需要将扩展 JAR 文件添加到系统,那么应使用 JVM 定制属性 ws.ext.dirs 来指定此 JAR 文件的绝对路径。 还可以将该 JAR 文件放入 WAS_HOME/lib/ext/ 目录中,但建议您还是使用 JVM 定制属性 ws.ext.dirs 来指定扩展 JAR 文件的路径。

详细类装入

指定是否为类装入使用详细调试输出。 缺省情况为不启用详细类装入。

信息
数据类型 Boolean
缺省值

详细垃圾回收

指定是否为垃圾回收使用详细调试输出。 缺省情况下不启用详细垃圾回收。

信息
数据类型 Boolean
缺省值

在启用此字段的情况下,每当垃圾回收器运行时报告会写至输出流。 此报告应向您说明 Java 垃圾回收进程的运行状况。

可以检查 verboseGC 报告以确定下列事项:
  • JVM 执行垃圾回收所花的时间。
    理想情况下,您希望 JVM 只花费其处理时间的 5% 来进行垃圾回收。 要确定 JVM 进行垃圾回收所花时间所占的百分比,可用它完成垃圾回收所花的时间除以自从上次 AF 以来的时间,再将获得的结果乘以 100。 例如:
    83.29/3724.32 * 100 = 2.236 percent

    如果您进行垃圾回收所花的时间超过 5%,并且频繁进行垃圾回收,那么可能需要增加 Java 堆大小。

  • 已分配的堆是否随着每次进行垃圾回收而增大。

    要确定已分配的堆是否在增大,在完成每个垃圾回收周期之后就查看仍未分配的堆所占的百分比,并验证此百分比是否未继续下降。 如果可用空间所占的百分比继续下降,那么说明从一次垃圾回收到下一次垃圾回收之后,堆大小在逐渐增大。 这种情况表示应用程序可能存在内存泄漏。

对于转换用户: V 7.0 和先前版本使用 optthruput 垃圾回收算法。 在 V8.0 和更高版本中,缺省值设置为分代垃圾回收器。 此垃圾回收算法可以提高性能。 将以下 JVM 选项添加到 WebSphere® Application Server 启动命令: -Xgcpolicy:gencon。 如果您喜欢使用 optthruput 垃圾回收算法,那么可以除去 -Xgcpolicy:gencon,使用 optthruput 垃圾回收算法。

详细 JNI

指定是否为本机方法调用使用详细调试输出。 缺省为不启用详细 Java 本机接口(JNI)活动。

信息
数据类型 Boolean
缺省值

初始堆大小

指定 JVM 代码可使用的初始堆大小(以兆字节计)。 如果此字段为空,那么将使用缺省值。

[IBM i]对于 IBM i 和分布式平台,缺省初始堆大小为 50 MB。

最佳实践: 这些缺省值对于大多数应用程序而言已足够。
[IBM i]避免麻烦: 对于 IBM i,初始堆大小必须始终小于最大堆大小。 不要将初始堆大小和最大堆大小属性设置为同一个值。

增大此设置可改进启动性能。 减少了进行垃圾回收的次数,并且性能提高了 10%。

增大 Java 堆的大小将继续提高吞吐量,直到堆变得太大而无法驻留在物理内存中为止。 如果堆大小超过了可用物理内存量,并且发生了页面调度,那么性能将显著下降。

最大堆大小

指定 JVM 代码可使用的最大堆大小(以兆字节计)。 如果此字段为空,那么将使用缺省值。

缺省最大堆大小为 256 MB。 此缺省值同时适用于 32 位和 64 位配置。

增大最大堆大小设置可提高启动性能。 当您增大最大堆大小时,减少进行垃圾回收的次数,并且性能还将提高 10%。

通常,增大此设置将提高吞吐量,直到此堆变得太大以致于物理内存中无法容纳它为止。 如果堆大小超过了可用物理内存量,并且发生了页面调度,那么性能将显著下降。 因此,您为此属性指定的值允许堆包含在物理内存中十分重要。

最佳实践: 这些缺省值适用于大多数应用程序。 如果您认为垃圾回收进行得太频繁,那么可启用详细垃圾回收属性。 如果垃圾回收进行得太频繁,请增大 JVM 堆的最大大小。
[IBM i]

运行 HProf

指定是否使用 HProf 概要分析程序支持。 要使用另一个概要分析程序,请使用 HProf 参数设置指定定制概要分析程序设置。 缺省为不启用 HProf 概要分析程序支持。

如果您将运行 HProf 属性设置为 true,那么必须将命令行概要分析程序参数指定为 HProf 参数属性的值。

信息
数据类型 Boolean
缺省值
[IBM i]

HProf 参数

指定要传递给启动应用程序服务器进程的 JVM 代码的命令行概要分析程序参数。 您可以指定何时启用 HProf 概要分析程序支持的参数。

仅当“运行 HProf”属性设置为 true 时才需要 HProf 参数。

调试方式

指定是否以调试方式运行 JVM。 缺省情况是不启用调试方式支持。

如果您将调试方式属性设置为 true,那么必须将命令行调试参数指定为调试参数属性的值。

信息
数据类型 Boolean
缺省值

调试参数

指定命令行调试参数以传递给用来启动应用程序服务器进程的 JVM 代码。 当调试方式属性设置为 true 时,就可以指定这些参数。

如果对多个应用程序服务器启用调试,请验证为地址参数指定的值不相同。 地址参数定义用于调试的端口。 如果将两个都启用了调试的服务器配置为使用同一个调试端口,那么这两个服务器可能无法正常启动。 例如,可能使用调试参数 address=7777(这是调试地址参数的缺省值)同时配置了这两个服务器。

信息
数据类型 字符串
单元 Java 命令行参数

通用 JVM 参数

指定要传递到用于启动应用程序服务器进程的 Java 虚拟机代码的命令行参数。

可以在通用 JVM 参数字段中输入下列可选命令行参数。 如果输入多个自变量,请在每个自变量之间输入空格。
避免麻烦: 如果自变量声明仅适用于 IBM Developer Kit ,那么不能将该自变量与来自其他提供程序 (例如 Microsoft 或 Hewlett-Packard) 的 JVM 配合使用
-Dcom.ibm.crypto.provider.doAESInHardware:
如果要启用随 IBM SDK and Runtime Environment for AIX®Java Technology Edition V 7 提供的高级加密标准 (AES) 功能,请将此选项设置为 true 。 AES 是一个对称块密码,用于对数据进行多次加密和解密。 启用此功能可提高 WebSphere Application Server SSL 处理的性能。

如果您想使用比缺省方式下所使用的优化级别更低的优化级别来进行初始编译,请指定 -Xquickstart。 之后,根据采样结果的不同,可以采用缺省方式下初始编译的级别来进行重新编译。

适合于早期的平均速度比长期运行吞吐量更为重要的应用程序 -Xquickstart。 在某些调试方案,测试线束和短运行工具中,您可以将启动时间缩短 15 %-20%。

如果您希望在装入类期间不验证类,那么可指定 -Xverify:none。 使用 -Xverify:none 将禁用 Java 类验证,这可使启动时间缩短 10-15%。 但是,指定此参数时,不会检测到损坏或无效的类数据。 如果装入已损坏的类数据,那么 JVM 的行为可能会发生异常,或者 JVM 可能会失败。

如果要进行字节码修改,请不要使用此参数,因为如果发生任何检测错误, JVM 可能会失败。 如果在此参数仍生效的情况下遇到 JVM 故障或者 JVM 的行为发生异常,那么调试 JVM 问题时首先应除去此参数。

如果您想禁用对类进行垃圾回收,请指定 -Xnoclassgc。 此参数会导致重用类的情况更多,还可使性能稍微有所提高。 但是,仍在使用这些类所拥有的资源,即使未调用这些类也是如此。

类垃圾回收的性能影响通常最小,在基于 Java Platform, Enterprise Edition (Java EE) 的系统中关闭类垃圾回收,大量使用应用程序类装入器,可能会有效地造成类数据的内存泄漏,并导致 JVM 抛出内存不足异常。

如果要监视垃圾回收,那么可以使用 verbose:gc 配置设置。 可以使用最终获得的输出来确定回收这些资源对性能造成的影响。

如果指定 -Xnoclassgc 参数,那么每当重新部署应用程序时,都必须始终重新启动应用程序服务器以清除先前版本的应用程序中的类和静态数据。

[IBM i]避免麻烦: 必须使用 -noclassgc 参数在此平台上禁用类垃圾回收。

如果您想禁用堆压缩,请指定 -Xnocompactgc。 堆压缩是成本最高的垃圾回收操作。 如果您正在使用 IBM Developer Kit ,那么应避免堆压缩。 如果您禁用堆压缩,那么消除了所有相关的开销。

[IBM i]避免麻烦: IBM i 不支持此参数。

指定 -Xgcpolicy 以设置垃圾回收策略。 此参数仅对 IBM Developer Kit 有效。

如果您想优化吞吐量,并且如果长时间暂停进行垃圾回收也不会产生问题,请将此参数设置为 optthruput

如果正在使用分代垃圾回收器,那么将此参数设置为 gencon。 分代模式尝试实现高吞吐量并同时缩短垃圾回收暂停时间。 为了实现此目标,将堆分为新区域和旧区域。 长生命周期对象将被提升到旧空间,而短生命周期对象将在新空间中被迅速地作为垃圾回收。 gencon 策略能使许多应用程序受益匪浅。 但是,它并不适合所有应用程序,并且通常难以调整。

如果您想使用并发标记来跟踪在堆变满之前从堆栈中启动的应用程序线程,请将此参数设置为 optavgpause。 指定了此参数之后,垃圾回收器的暂停将变得统一,并且长时间的暂停也不再明显。 但是,使用此策略将使吞吐量降低,这是因为线程可能必须执行额外的操作。

如果要提高多处理器系统(通常使用八个以上处理器)的性能,那么将此参数设为 subpool。 此政策仅适用于 IBM、System p和System z®处理器。 除了将堆划分为子池以提高对象分配可伸缩性以外,subpool 策略与 optthruput 策略类似。

[IBM i]避免麻烦: IBM i 不支持此参数。

如果您想更改最小可用堆大小所占的百分比,请指定 -Xminf。 如果可用空间小于指定的量,那么堆将增大。 在启用了复位的方式下,此参数指定中间件和瞬态堆的可用空间所占的最小百分比。 为此自变量指定的值是浮点数 01。 缺省值为 .3 (30%)。

[IBM i]避免麻烦: IBM i 不支持此参数。
-Dcom.ibm.CORBA.请求超时=超时间隔

指定 -Dcom.ibm.CORBA.RequestTimeout= timeout_interval 参数,以设置对从客户机发送的请求作出响应时应遵循的超时时间段。 此参数使用 -D 选项。timeout_interval 是以秒计的超时周期。 如果网络遇到极端等待时间,指定大的值,以防止超时。 如果您指定过小的值,参与工作负载管理的应用程序服务器会在接收响应前超时。

仅当应用程序遇到超时问题时才指定此参数。 没有为此参数提供建议值。

-Dcom.ibm.CORBA.请求超时=超时间隔

指定 -Dcom.ibm.CORBA.RequestTimeout= timeout_interval 参数,以设置对从客户机发送的请求作出响应时应遵循的超时时间段。 此参数使用 -D 选项。timeout_interval 是以秒计的超时周期。 如果网络遇到极端等待时间,指定大的值,以防止超时。 如果您指定过小的值,参与工作负载管理的应用程序服务器会在接收响应前超时。

仅当应用程序遇到超时问题时才指定此参数。 没有为此参数提供建议值。

-Dcom.ibm.server.allow.sigkill=true

-Dcom.ibm.server.allow.sigkill=true 参数允许 Node Agent 在 stop 方法未在为 Ping 时间间隔指定的时间间隔内完成时,使用进程的 terminate 方法。 当 Node Agent 正在监视应用程序服务器并与该应用程序服务器失去联系时,此设置非常有用。

当由于已针对应用程序服务器启用自动重新启动,应用程序服务器的监视策略允许 Node Agent 重新启动应用程序服务器时,Node Agent 会针对应用程序服务器进程执行 stop 方法。 在 stop 进行期间,Node Agent 会监视应用程序服务器,如果应用程序服务器未在为 Ping 时间间隔指定的时间内停止,并且此参数设为 true(缺省值),那么 Node Agent 会针对应用程序服务器进程执行 terminate 方法,以停止应用程序服务器进程。

如果将此参数设置为 false,那么 Node Agent 会继续监视 stop 进程,但不会尝试重新启动应用程序服务器。

要使用管理控制台来禁用此参数,请单击 系统管理> Node Agent> nodeagent_name > Java 和进程管理> 进程定义> Java 虚拟机> 通用 JVM 参数

[8.5.0.1 或更高版本]-Dcom.ibm.websphere.alarmthreadmonitor.hung_alarm_mute=

此参数指定警报在系统日志中的挂起线程消息中报告其完整堆栈跟踪的最大次数。

当系统警报线程处于活动状态的时间超过警报线程监视器阈值时,应用程序服务器将记录一条挂起线程消息,此消息中包含警报线程的名称、该警报线程已处于活动状态的时间以及完整异常堆栈跟踪。 完整堆栈跟踪对于调试造成延迟的原因很有用,但是,如果频繁触发挂起线程消息,那么重复的长消息可能会导致难以查找系统日志中的其他信息。 将此参数设置为一个大于 0 的证书,以指定任何单个警报报告其完整堆栈跟踪的最大次数。 达到此阈值之后,后续的每个挂起线程消息将仅包括挂起警报处理程序的条目。

缺省值 0 表明警报的所有挂起线程消息都包括完整堆栈跟踪。

注: 此属性指定每个警报处理程序类的阈值,而不是指定消息总数或每个警报处理程序实例的阈值。
[8.5.0.1 或更高版本]-Dcom.ibm.websphere.native.logging.timestamp=true

指定此参数以在所有输出到 native_stdout 和 native_stderr 日志文件的服务器调试消息前面添加时间戳记和线程标识。 可以使用时间戳记和线程标识使应用程序服务器引导组件的行为与其他服务器机制(在 SystemOut 和 SystemErr 日志文件中进行了指示)互相关联。 缺省情况下,此行为处于禁用状态。

使用 JVM 通用参数 -Dws.ext.debug=true 来配置服务器时,服务器会在其引导序列中将调试消息发送至 native_stdout.log 和 native_stderr.log。 如果 -Dcom.ibm.websphere.native.logging.timestamp 也设置为 true,那么服务器将输出附带时间戳记和线程标识的调试消息,如以下示例中所示:

[6/18/12 16:24:31:453 CDT] 00000000 
ws.ext.mains.args[0]=-nosplash
[6/18/12 16:24:31:453 CDT] 00000000 
ws.ext.mains.args[1]=-application
[6/18/12 16:24:31:453 CDT] 00000000 
ws.ext.mains.args[2]=com.ibm.ws.bootstrap.WSLauncher
[6/18/12 16:24:31:453 CDT] 00000000 
ws.ext.mains.args[3]=com.ibm.ws.runtime.WsServer
重要信息: 仅在 IBM 支持人员的指导下指定 -Dws.ext.debug= true
-Dcom.ibm.ws.wim.registry.DbSharedAcrossMultipleServers=true

当虚拟成员管理器 (VMM) DB/LA 存储库在不同安装间共享时,指定 -Dcom.ibm.ws.wim.registry.DbSharedAcrossMultipleServers=true。 此属性不适用于集群环境。 设置此属性使 VMM 能够同步从共享存储库的多个 WebSphere Application Server 安装发出的调用。

-Dcom.ibm.websphere.wlm.unusable.interval=时间间隔
当刷新客户机的工作负载管理状态的时间间隔太短或太长时,指定 -Dcom.ibm.websphere.wlm.unusable.interval= timeout_interval 参数以更改 com.ibm.websphere.wlm.unusable.interval 属性的值。 此属性指定工作负载管理客户机运行时在将服务器标记为不可用之后,在再次尝试与该服务器联系之前所等待的时间(以秒计)。 此参数使用 -D 选项。 缺省值为 300 秒。 如果属性设置为大的值,那么一段很长的时间内服务器都标记为不可用。 这防止工作负载管理刷新协议刷新客户机的工作负载管理状态,直到这段时间结束后。

此参数仅适用于 z/OS®。 指定 -Dcom.ibm.ws.buffermgmt.impl.WsByteBufferPoolManagerImpl= 参数以指示在不再需要单个直接字节缓冲区时应立即释放该缓冲区的存储器。 此参数的唯一受支持的值为 com.ibm.ws.buffermgmt.impl.ZOSWsByteBufferPoolManagerImpl

JVM 为处理请求数据而创建的直接字节缓冲区在 Language Environment ® (LE) 堆中分配,而不是在 JVM 堆中分配。 通常,即使不再需要直接字节缓冲区,也只有在下次进行垃圾回收之后,JVM 才会释放此本机 LE 存储器。 如果服务器在处理大型请求,LE 存储空间会在 JVM 运行垃圾回收周期之前耗尽,从而导致服务器异常终止(异常结束)。 使用以下参数来配置 JVM 可以防止发生这些异常结束。
-Dcom.ibm.ws.buffermgmt.impl.WsByteBufferPoolManagerImpl=com.ibm.ws.buffermgmt.impl.ZOSWsByteBufferPoolManagerImpl

指定是否在 SIP 代理服务器上启用 SIP 合规性检查。 SIP 合规性检查确保 SIP 消息符合会话初始化协议标准。 此属性设置为 true 时,启用 SIP 合规性检查。

避免麻烦:如果你在z/OSWebSphere Application Server Network Deployment环境,并且您的代理服务器不是集群的一部分,您可以使用isSipComplianceEnabled SIP 代理服务器自定义属性用于启用或禁用该 SIP 代理服务器的 SIP 合规性检查。 然而,如果正在运行独立应用程序服务器或代理服务器是集群的一部分,那么必须使用此通用 JVM 参数来启用或禁用 SIP 合规性检查。

指定 -Xshareclasses:none 参数表示对进程禁用类共享功能。 类共享 (随 Java SE 6 和更高版本提供,缺省情况下已启用) 使多个 JVM 进程能够共享先前装入并存储在高速缓存中的类。 高速缓存位于共享内存中,在 JVM 重新启动后仍持久存在。 在 JVM 上运行的所有 WebSphere Application Server 进程 (例如,应用程序服务器, Node Agent 和 Deployment Manager) 都可以使用类共享来缩短启动时间并减少内存占用量。

有时,必须清除共享类高速缓存,例如修改应用程序代码或升级 WebSphere Application Server时。 要清除高速缓存,请从目录 <app_server_root>/bin/运行 clearClassCache 脚本。

[IBM i]
clearClassCache
注: 在使用 clearClassCache 脚本之前,必须停止所有连接的 JVM。 看clearClassCache脚本有关使用的更多信息clearClassCache脚本。
避免麻烦:
  • 不支持类共享及其关联设置:
-XXallowvmshutdown:false
使用 -XXallowvmshutdown:false 参数来恢复为 JVM 的先前不正确行为。 Java 5.0 SR10 和 Java 6 SR5 更正了 Java 虚拟机 (JVM) 不能正确关闭的问题。 如果您有依赖于旧行为的应用程序,那么可以通过将此参数添加至“通用 JVM 参数”部分来恢复为先前行为。
信息
数据类型 字符串
单元 Java 命令行参数

可执行文件 JAR 文件名

指定 JVM 代码使用的可执行 JAR 文件的完整路径名。

信息
数据类型 字符串
单元 路径名

禁用 JIT

指定是否禁用 JVM 代码的即时 (JIT) 编译器选项。

如果您禁用 JIT 编译器,吞吐量会显著地减少。 因此,出于性能原因,始终启用 JIT。

信息
数据类型 Boolean
缺省值 false(启用 JIT)
建议 启用 JIT