您的位置:首页 > 其它

WebLogic Server 性能及调整

2013-04-28 09:51 337 查看
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。envelope

下列部分讨论的是 WebLogic Server 的 JVM 调整选项:

JVM 调整注意事项

哪种 JVM 适合您的系统?

垃圾收集

对 IA32 平台启用旋转功能

JVM 调整注意事项

表 5-1 列出了针对 WebLogic Server 的 JVM 调整的一般注意事项:

5-1 JVM 调整一般注意事项调整因素

信息引用

JVM 供应商和版本

仅可使用生产 JVM(在该 JVM 上,WebLogic Server 已通过认证)。此版本的 WebLogic Server 仅支持兼容 J2SE 5.0 的 JVM。

Supported Configurations页会经常更新,其中包含有关各种平台的认证信息。

调整堆大小和垃圾收集

有关 WebLogic Server 堆大小调整的详细信息,请参阅垃圾收集

选择 GC(垃圾收集)方案

许多 GC 方案均可用于管理系统内存,可用哪种方案取决于您的应用程序,如选择垃圾收集方案中所述。

混合客户端/服务器 JVM

WebLogic Server 支持使用不同 JVM 版本进行客户端和服务器部署。请参阅支持页获取混合客户端/服务器 JVM

UNIX 线程模型

选择何种 Solaris 线程模型将对 Solaris 平台上的 JVM 性能产生巨大影响。可从多个线程模型以及所选模型内的各种同步方法中进行选择,但不同 JVM 的情况也有所不同。

请参阅 Sun Microsystems 网站上的 Performance Documentation For the Java Hotspot Virtual Machine: Threading

哪种 JVM 适合您的系统?

虽然本部分着重介绍 Sun Microsystems 用于 Windows、UNIX 和 Linux 平台的 J2SE 5.0 JVM,但请注意 BEA JRockit JVM 是明确为服务器端应用程序开发的,并针对 Intel 体系结构进行了优化,可以确保 Java 应用程序的可靠性、可伸缩性、可管理性和灵活性。有关在 Windows 和 Linux 平台上使用 JRockit 的优势的详细信息,请参阅 Introduction to JRockit JDK

有关 JVM 的常规详细信息,请参阅 JVM 规范简介。有关 JVM 调整相关内容的链接,请参阅相关内容:性能工具和信息

更换到另一个 JVM

创建域时,如果选择自定义配置,则配置向导会显示 WebLogic Server 安装的 JDK 列表。在此列表中,您可以选择希望运行域的 JVM,然后 Configuration Wizard 将根据您的选择配置 BEA 启动脚本。如果在创建域之后,想要使用另一 JVM,请参阅更改运行服务器的 JVM

垃圾收集

垃圾收集是 VM 释放 Java 堆中未使用的 Java 对象的过程。下列部分提供有关调整 VM 垃圾收集的信息:

VM 堆大小和垃圾收集

选择垃圾收集方案

使用详细垃圾收集确定堆大小

指定堆大小值

自动对内存不足情况进行日志记录

手工请求垃圾收集

请求线程堆栈

VM 堆大小和垃圾收集

Java 程序对象存储在 Java 堆中。Java 堆是包括活动对象、无效对象及可用内存的仓库。如果某对象不再能够在运行的程序中通过任何指针进行访问,则会将该对象视为“垃圾”,可以进行收集。将进行垃圾收集所耗费的时间调整为执行时间的 5% 以下,这是一种最佳实践。

JVM 堆大小决定 VM 收集垃圾的频率及所耗费的时间。可以接受的垃圾收集速率因应用程序而异,并且应在分析垃圾收集的实际时间和频率后进行调整。如果将堆大小设置得很大,则执行完全垃圾收集的速度将会较慢,但收集频率会较低。如果根据内存需求设置堆大小,则完全垃圾收集的速度会较快,但收集频率会较高。

调整堆大小的目的是将 JVM 进行垃圾收集所耗费的时间缩到最短,同时将 WebLogic Server 在某给定时间内可以处理的客户端数增至最大。要确保在基准测试期间得到最佳性能,可将堆大小值设置得很大,以确保不会在整个基准测试过程中进行垃圾收集。

如果堆空间不足,则可能会出现以下 Java 错误:

java.lang.OutOfMemoryError <<no stack trace available>>
java.lang.OutOfMemoryError <<no stack trace available>>
Exception in thread "main"

要修改堆空间值,请参阅指定堆大小值

要配置 WebLogic Server 以便在堆空间用尽时自动进行检测,以及处理服务器中内存不足的情况,请参阅自动对内存不足情况进行日志记录指定堆大小值

选择垃圾收集方案

可从若干垃圾收集方案中进行选择,以管理系统内存,所选择的方案取决于所使用的 JVM。例如,某些垃圾收集方案更适用于给定类型的应用程序。了解应用程序的工作负荷以及 JVM 所用的各种垃圾收集算法之后,就可以优化垃圾收集的配置。

请参阅下列链接,以查看 JVM 垃圾收集选项的深入讨论:

有关 Sun 的 HotSpot VM 可用的垃圾收集方案的概述,请参阅 Tuning Garbage Collection with the 5.0 Java Virtual Machine

有关可用收集方案的详尽说明,请参阅 Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1

有关 BEA JRockit JDK 可用的垃圾收集方案的讨论,请参阅。

对于从 HP 视角来看有关垃圾收集的某些观点,请参阅 。

使用详细垃圾收集确定堆大小

通过详细垃圾收集选项 (verbosegc),能够精确测量向垃圾收集投入了多少时间和资源。要确定最有效的堆大小,请启用详细垃圾收集,然后将其输出重定向到日志文件,以便进行诊断。

此过程的大致步骤如下:

1 在运行应用程序时监视 WebLogic Server 在最大负载下的性能。

1 用 -verbosegc 选项对 JVM 启用详细垃圾收集输出,然后将标准错误和标准输出都重定向到日志文件。

这会将线程转储信息存储到相应的 WebLogic Server 信息性消息和错误消息上下文中,从而提供更有用的日志以便进行诊断。

例如,在 Windows 和 Solaris 中,输入下列代码:

% java -ms32m -mx200m -verbosegc -classpath $CLASSPATH
-Dweblogic.Name=%SERVER_NAME% -Dbea.home="C:\bea"
-Dweblogic.management.username=%WLS_USER%
-Dweblogic.management.password=%WLS_PW%
-Dweblogic.management.server=%ADMIN_URL%
-Dweblogic.ProductionModeEnabled=%STARTMODE%
-Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server
>> logfile.txt 2>&1

其中的 logfile.txt 2>&1 命令可将标准错误和标准输出都重定向到日志文件。

在 HPUX 中,可使用以下选项将 stderr stdout 重定向到单个文件:

-Xverbosegc:file=/tmp/gc$$.out

其中 $$ 可以映射到 Java 进程的进程 ID (PID)。因为输出中包括运行垃圾收集时的时间戳,所以可推断出进行垃圾收集的频率。

1 分析下列数据点:

1 多长时间进行一次垃圾收集?在 weblogic.log 文件中,比较垃圾收集的时间戳。

1 进行垃圾收集花费了多长时间?完全垃圾收集耗时不应超过 3 到 5 秒。

1 平均内存占用量为多少?换句话说,每当完全垃圾收集执行完毕后,堆占用多少内存?如果堆始终占用 15%,则可以将堆大小设置得更小些。

2 检查新一代堆大小 (Sun) 或温床大小 (BEA Jrockit)。

对于 BEA Jrockit:请参阅 BEA JRockit JVM 堆大小选项

对于 Sun:请参阅 Java HotSpot VM 堆大小选项

3 确保堆大小不超过系统中可用 RAM 的大小。

在不会导致系统向磁盘“交换”页面的前提下,使用尽可能大的堆大小。系统中可用 RAM 的大小取决于硬件配置,以及在计算机中运行进程所需的内存量。确定系统中的可用 RAM 量时,可求助于系统管理员。

4 如果发现系统收集垃圾所耗费的时间太长(分配的虚拟内存已超过 RAM 的处理能力),请减小堆大小。

通常应将可用 RAM(未被操作系统或其他进程占用)的 80% 用于 JVM。

5 如果发现还有大量的可用 RAM,则在计算机中运行更多 WebLogic Server 实例。

记住,调整堆大小的目的是将 JVM 进行垃圾收集所耗费的时间缩到最短,同时将 WebLogic Server 在某给定时间内可以处理的客户端数增至最大。

注意:

JVM 供应商可能会提供用于打印详尽的垃圾收集报告的其他选项。例如,可在关闭程序时使用 BEA JRockit JVM -Xgcreport 选项打印详尽的垃圾收集报告,请参阅“。

指定堆大小值

可供 JVM 使用的 Java 堆大小对系统性能具有较大影响。本部分介绍用于定义堆大小值的命令行选项。每当启动 WebLogic Server 实例时,均需指定 Java 堆大小值。在 java 命令行中,或通过修改随 WebLogic 分发提供的示例启动脚本(用于启动 WebLogic Server)中的默认值,均可执行上述操作。

堆大小调整提示

BEA JRockit JVM 堆大小选项

Java HotSpot VM 堆大小选项

堆大小调整提示

以下部分提供了调整 VM 堆大小的一般准则:

堆大小应设置为一个适当的值,从而使 VM 使用的最大内存量不超过可用物理 RAM 量。如果超过该值,则 OS 会开始分页,性能也会显著降低。VM 使用的内存始终多于堆大小。除了堆大小设置,还要分配内部 VM 功能、VM 之外的本地库和永久代内存(仅适用于 Sun VM:存储类和方法所需的内存)所需的内存。

使用分代式垃圾收集方案时,温床大小不应超过 Java 堆总大小的一半。通常情况下,堆大小的 25% 到 40% 就已足够。

在生产环境中,将最小堆大小和最大堆大小设置为同一值,可以避免浪费用于时常调整堆大小所需的 VM 资源。这也适用于新一代堆大小 (Sun) 或温床大小 (BEA Jrockit)。

BEA JRockit JVM 堆大小选项

虽然 BEA JRockit 可以自动进行试探性堆大小调整,但这并不是所有应用程序的最佳选择。大多数情况下,最佳性能是通过调整每种应用程序的 VM 实现的,方法是调整表 5-2 中所示的堆大小选项。

5-2 BEA JRockit JVM 堆大小选项任务

选项

注释

设置温床

-Xns

最好尝试将温床设置得尽可能大,同时还要使垃圾收集暂停时间缩短至可以接受的程度。应用程序创建大量临时对象时,这尤其重要。

温床的最大大小不能超过最大堆大小的 95%。

设置最小堆大小

-Xms

BEA 建议将最小堆大小 (-Xms) 与最大堆大小 (-Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低。

设置最大堆大小

-Xmx

如果与活动数据量相比,最大堆大小值设置得较低,则会因强制进行频繁垃圾收集而降低性能。

设置垃圾收集

-Xgc: parallel

尽早在运行 Java 应用程序时执行自适应优化。

-XXaggressive:memory

这样,瓶颈检测器会在开始时以较高的频率运行,然后逐渐降低频率。此选项还可以指示 BEA JRockit 主动使用可用内存。

例如,从 java 命令行启动 WebLogic Server 实例时,可使用以下命令指定 BEA JRockit VM 堆大小值:

$ java -Xns10m -Xms512m -Xmx512m

这些值的默认大小的度量单位是字节。该值后附加字母“k”或“K”表示 KB;附加“m”或“M”表示 MB;附加“g”或“G”表示 GB。上例将 10 MB 内存分配给温床堆大小,将 512 MB 内存分配给运行在 JVM 中的 WebLogic Server 实例的最小和最大堆大小。

有关针对 WebLogic 的 JRockit JVM 设置适当的堆大小的详细信息,请参阅 Tuning the JRockit JVM

其他 BEA JRockit VM 选项

BEA 提供可以提高 BEA JRockit VM 性能的其他命令行选项。有关详细信息,请参阅 。

Java HotSpot VM 堆大小选项

通过分别调整每个应用程序,可以实现最佳性能。但是,在启动 WebLogic Server 时配置表 5-3 中列出的 Java HotSpot VM 堆大小选项,可以提高大多数应用程序的性能。

这些选项因体系结构和操作系统而异。有关平台特定的 JVM 调整选项,请参阅供应商提供的文档。

5-3 Java 堆大小选项任务

选项

注释

设置新一代堆大小

-XX:NewSize

将 -XX:NewSize 的大小设置为堆大小的四分之一,这是一条通用规则。如果存在大量短期对象,则增大此选项的值。

在增加处理器的同时,一定要增加新一代堆大小。内存分配可以并行进行,但垃圾收集不可并行进行。

设置最大新一代堆大小

-XX:MaxNewSize

设置新一代堆大小的上限。

设置新堆大小比率

-XX:SurvivorRatio

新一代区域分为三个子区:Eden 和两个大小相等的生存空间。

配置 Eden/生存空间大小的比率。尝试将此值设置为 8,然后监视垃圾收集情况。

设置最小堆大小

-Xms

将最小堆大小 (-Xms) 与最大堆大小 (-Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低,这是一条通用规则。

设置最大堆大小

-Xmx

设置堆大小的上限。

设置大堆和私有共享内存

-XX:+UseISM -XX:+AggressiveHeap

请参阅 http://java.sun.com/docs/hotspot/ism.html

例如,从 java 命令行启动 WebLogic Server 实例时,可使用以下命令指定 HotSpot VM 堆大小值:

$ java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m

这些值的默认大小的度量单位是字节。该值后附加字母“k”或“K”表示 KB;附加“m”或“M”表示 MB;附加“g”或“G”表示 GB。上例将 128 MB 内存分配给新一代堆大小和最大新一代堆大小,将 512 MB 内存分配给运行在 JVM 中的 WebLogic Server 实例的最小和最大堆大小。

其他 Java HotSpot VM 选项

Sun 提供了可以提高 VM 性能的其他标准和非标准命令行选项。使用这些选项的方式取决于应用程序的编码方式。

对客户端和服务器 JVM 进行测试,以确定更适用于特定应用程序的选项。Sun Microsystems 的 Java HotSpot VM Options 文档提供有关可以影响 Java HotSpot 虚拟机性能特征的命令行选项和环境变量的信息。

有关 HotSpot VM 选项的其他示例,请参阅:

Standard Options for Windows (Win32) VMs

Standard Options for Solaris VMs.

Standard Options for Linux VMs.

Sun Microsystems 的 Java Virtual Machine 文档详细论述了 J2SE 5.0 Java 虚拟机的客户端和服务器实现。

自动对内存不足情况进行日志记录

通过 WebLogic Server 能够自动记录由服务器检测到的内存不足情况。WebLogic Server 通过在某段时间间隔内对可用内存进行一定次数的采样,来检测内存不足。在每个时间间隔结束时,服务器都会记录平均可用内存,并将其与下一时间间隔中获得的平均可用内存相比较。如果在任何取样间隔之后,平均值下降了用户配置的量,服务器将在日志文件中记录内存不足的警告消息,并将服务器运行状况设置为“警告”。请参阅“管理控制台联机帮助”中的 记录内存不足情况

手工请求垃圾收集

您可能会发现有必要从管理控制台中手工请求完全垃圾收集。执行此操作时请记住,垃圾收集的开销很大,因为 JVM 常常检查堆中的所有活动对象。请参阅“管理控制台联机帮助”中的手工请求垃圾收集

请求线程堆栈

您可能会发现有必要在调整应用程序时显示线程堆栈。请参阅“管理控制台联机帮助”中的显示线程堆栈

对 IA32 平台启用旋转功能

如果在多处理器系统中运行的是锁定争用激烈的大负载应用程序,则可尝试通过使用旋转功能提升性能。通过此选项能够在进入休眠状态前对锁进行短时旋转。

Sun JDK

Sun 已针对 Windows IA32 平台,对 JDK 5.0 中的默认锁旋转行为进行了更改。对于 JDK 5.0 版,默认情况下锁旋转处于禁用状态。对于此版本,BEA 已明确地在用于启动 WebLogic Server 的环境脚本中启用了旋转功能。要启用旋转功能,请使用以下 VM 选项:

-XX:+UseSpinning

BEA JRockit

BEA JRockit VM 可以自动针对各种锁调整旋转功能,从而无须设置此参数。

注意:

在 BEA JRockit 8.1 SDK 版中,旋转功能是通过设置 -XXenablefatspin 选项进行调整的。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: