WebLogic Server 性能及调整
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 WebLogic Server 和应用程序的性能。
下列部分讨论的是 WebLogic Server 的 JVM 调整选项:
JVM 调整注意事项
表 5-1 列出了针对 WebLogic Server 的 JVM 调整的一般注意事项:
表 5-1 JVM 调整一般注意事项
|
仅可使用生产 JVM(在该 JVM 上,WebLogic Server 已通过认证)。此版本的 WebLogic Server 仅支持兼容 J2SE 5.0 的 JVM。
|
|
有关 WebLogic Server 堆大小调整的详细信息,请参阅 垃圾收集。
|
|
许多 GC 方案均可用于管理系统内存,可用哪种方案取决于您的应用程序,如 选择垃圾收集方案中所述。
|
|
WebLogic Server 支持使用不同 JVM 版本进行客户端和服务器部署。请参阅支持页 for Mixed Client/Server JVMs。
|
|
选择何种 Solaris 线程模型将对 Solaris 平台上的 JVM 性能产生巨大影响。可从多个线程模型以及所选模型内的各种同步方法中进行选择,但不同 JVM 的情况也有所不同。
|
哪种 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 堆大小和垃圾收集
Java 程序对象存储在 Java 堆中。Java 堆是包括活动对象、无效对象及可用内存的仓库。如果某对象不再能够在运行的程序中通过任何指针进行访问,则会将该对象视为“垃圾”,可以进行收集。将进行垃圾收集所耗费的时间调整为执行时间的 5% 以下,这是一种最佳实践。
JVM 堆大小决定 VM 收集垃圾的频率及所耗费的时间。可以接受的垃圾收集速率因应用程序而异,并且应在分析垃圾收集的实际时间和频率后进行调整。如果将堆大小设置得很大,则执行完全垃圾收集的速度将会较慢,但收集频率会较低。如果根据内存需求设置堆大小,则完全垃圾收集的速度会较快,但收集频率会较高。
调整堆大小的目的是将 JVM 进行垃圾收集所耗费的时间缩到最短,同时将 WebLogic Server 在某给定时间内可以处理的客户端数增至最大。要确保在基准测试期间得到最佳性能,可将堆大小值设置得很大,以确保不会在整个基准测试过程中进行垃圾收集。
如果堆空间不足,则可能会出现以下 Java 错误:
要修改堆空间值,请参阅指定堆大小值。
要配置 WebLogic Server 以便在堆空间用尽时自动进行检测,以及处理服务器中内存不足的情况,请参阅自动对内存不足情况进行日志记录和指定堆大小值。
选择垃圾收集方案
可从若干垃圾收集方案中进行选择,以管理系统内存,所选择的方案取决于所使用的 JVM。例如,某些垃圾收集方案更适用于给定类型的应用程序。了解应用程序的工作负荷以及 JVM 所用的各种垃圾收集算法之后,就可以优化垃圾收集的配置。
请参阅下列链接,以查看 JVM 垃圾收集选项的深入讨论:
使用详细垃圾收集确定堆大小
通过详细垃圾收集选项 (verbosegc
),能够精确测量向垃圾收集投入了多少时间和资源。要确定最有效的堆大小,请启用详细垃圾收集,然后将其输出重定向到日志文件,以便进行诊断。
此过程的大致步骤如下:
在运行应用程序时监视 WebLogic Server 在最大负载下的性能。
用 -verbosegc
选项对 JVM 启用详细垃圾收集输出,然后将标准错误和标准输出都重定向到日志文件。
这会将线程转储信息存储到相应的 WebLogic Server 信息性消息和错误消息上下文中,从而提供更有用的日志以便进行诊断。
例如,在 Windows 和 Solaris 中,输入下列代码:
其中的 logfile.txt 2>&1
命令可将标准错误和标准输出都重定向到日志文件。
在 HPUX 中,可使用以下选项将 stderr
stdout
重定向到单个文件:
-Xverbosegc:file=/tmp/gc$$.out
其中 $$
可以映射到 Java 进程的进程 ID (PID)。因为输出中包括运行垃圾收集时的时间戳,所以可推断出进行垃圾收集的频率。
分析下列数据点:
多长时间进行一次垃圾收集?在 weblogic.log
文件中,比较垃圾收集的时间戳。
进行垃圾收集花费了多长时间?完全垃圾收集耗时不应超过 3 到 5 秒。
平均内存占用量为多少?换句话说,每当完全垃圾收集执行完毕后,堆占用多少内存?如果堆始终占用 15%,则可以将堆大小设置得更小些。
检查新一代堆大小 (Sun) 或 Nursery 大小 (BEA Jrockit)。
确保堆大小不超过系统中可用 RAM 的大小。
在不会导致系统向磁盘“交换”页面的前提下,使用尽可能大的堆大小。系统中可用 RAM 的大小取决于硬件配置,以及在计算机中运行进程所需的内存量。确定系统中的可用 RAM 量时,可求助于系统管理员。
如果发现系统收集垃圾所耗费的时间太长(分配的虚拟内存已超过 RAM 的处理能力),请减小堆大小。
通常应将可用 RAM(未被操作系统或其他进程占用)的 80% 用于 JVM。
如果发现还有大量的可用 RAM,则在计算机中运行更多 WebLogic Server 实例。
记住,调整堆大小的目的是将 JVM 进行垃圾收集所耗费的时间缩到最短,同时将 WebLogic Server 在某给定时间内可以处理的客户端数增至最大。
注意: |
JVM 供应商可能会提供用于打印详尽的垃圾收集报告的其他选项。例如,可在关闭程序时使用 BEA JRockit JVM -Xgcreport 选项打印详尽的垃圾收集报告,请参阅。 |
指定堆大小值
可供 JVM 使用的 Java 堆大小对系统性能具有较大影响。本部分介绍用于定义堆大小值的命令行选项。每当启动 WebLogic Server 实例时,均需指定 Java 堆大小值。在 java
命令行中,或通过修改随 WebLogic 分发提供的示例启动脚本(用于启动 WebLogic Server)中的默认值,均可执行上述操作。
堆大小调整提示
以下部分提供了调整 VM 堆大小的一般准则:
堆大小应设置为一个适当的值,从而使 VM 使用的最大内存量不超过可用物理 RAM 量。如果超过该值,则 OS 会开始分页,性能也会显著降低。VM 使用的内存始终多于堆大小。除了堆大小设置,还要分配内部 VM 功能、VM 之外的本地库和永久代内存(仅适用于 Sun VM:存储类和方法所需的内存)所需的内存。
使用分代式垃圾收集方案时,Nursery 大小不应超过 Java 堆总大小的一半。通常情况下,堆大小的 25% 到 40% 就已足够。
在生产环境中,将最小堆大小和最大堆大小设置为同一值,可以避免浪费用于时常调整堆大小所需的 VM 资源。这也适用于新一代堆大小 (Sun) 或 Nursery 大小 (BEA Jrockit)。
BEA JRockit JVM 堆大小选项
虽然 BEA JRockit 可以自动进行试探性堆大小调整,但这并不是所有应用程序的最佳选择。大多数情况下,最佳性能是通过调整每种应用程序的 VM 实现的,方法是调整表 5-2 中所示的堆大小选项。
表 5-2 BEA JRockit JVM 堆大小选项
|
|
|
|
|
最好尝试将 Nursery 设置得尽可能大,同时还要使垃圾收集暂停时间缩短至可以接受的程度。应用程序创建大量临时对象时,这尤其重要。
Nursery 的最大大小不能超过最大堆大小的 95%。
|
|
|
BEA 建议将最小堆大小 ( -Xms) 与最大堆大小 ( -Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低。
|
|
|
如果与活动数据量相比,最大堆大小值设置得较低,则会因强制进行频繁垃圾收集而降低性能。
|
|
|
|
|
|
这样,瓶颈检测器会在开始时以较高的频率运行,然后逐渐降低频率。此选项还可以指示 BEA JRockit 主动使用可用内存。
|
例如,从 java
命令行启动 WebLogic Server 实例时,可使用以下命令指定 BEA JRockit VM 堆大小值:
这些值的默认大小的度量单位是字节。该值后附加字母“k”或“K”表示 KB;附加“m”或“M”表示 MB;附加“g”或“G”表示 GB。上例将 10 MB 内存分配给 Nursery 堆大小,将 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 的大小设置为堆大小的四分之一,这是一条通用规则。如果存在大量短期对象,则增大此选项的值。
在增加处理器的同时,一定要增加新一代堆大小。内存分配可以并行进行,但垃圾收集不可并行进行。
|
|
|
|
|
|
新一代区域分为三个子区:Eden 和两个大小相等的生存空间。
配置 Eden/生存空间大小的比率。尝试将此值设置为 8,然后监视垃圾收集情况。
|
|
|
将最小堆大小 ( -Xms) 与最大堆大小 ( -Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低,这是一条通用规则。
|
|
|
|
|
-XX:+UseISM -XX:+AggressiveHeap
|
|
例如,从 java
命令行启动 WebLogic Server 实例时,可使用以下命令指定 HotSpot VM 堆大小值:
这些值的默认大小的度量单位是字节。该值后附加字母“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 选项的其他示例,请参阅:
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 选项:
BEA JRockit
BEA JRockit VM 可以自动针对各种锁调整旋转功能,从而无须设置此参数。
注意: |
在 BEA JRockit 8.1 SDK 版中,旋转功能是通过设置 -XXenablefatspin 选项进行调整的。 |
分享到:
相关推荐
WebLogic Server性能调优是针对BEA公司的应用服务器产品的一项关键任务,旨在优化服务器的运行效率,提升系统响应速度和处理能力。以下是基于提供的文件内容的详细解释: 1. **硬件,操作系统,网络调整** - **...
WebLogic Server是Oracle公司的一款提供中间件...对于希望进一步提升WebLogic Server性能的企业用户而言,参考Oracle官方文档和推荐的最佳实践,并结合自身应用的特点进行调优,是确保应用服务器稳定运行的必要手段。
这些知识点反映了在进行Oracle WebLogic Server性能调优时需要关注的重要方面。通过以上指导,管理员和技术人员可以对WebLogic Server进行定制化配置,使其在不同环境和需求下都能运行在最佳状态。
开发者需要熟悉如何利用WebLogic Server提供的特性来增强应用的稳定性和性能。 **附录:部署描述文件基础** 附录提供了关于标准J2EE部署描述文件(如application.xml和application-client.xml)的详细信息,以及...
### Weblogic Server应用性能考虑及调优 #### 摘要 本文主要针对Weblogic Server的应用性能考虑及其调优方法进行了详细的阐述。考虑到性能优化是一个系统性工程,它覆盖了项目开发周期的各个环节,文中从多个角度...
通过学习本教程,读者将掌握WebLogic Server 11gR1 PS2的核心管理技能,能够有效地管理域、服务器、应用程序和集群,确保系统的稳定运行和高效性能。附带的"Oracle.WebLogic.Server.11gR1.PS2.pdf"文档和"Oracle....
以下是一些关于WebLogic Server性能调优的最佳实践: 1. **禁用页面检查** 为了提高性能,可以禁用Servlet和JSP的页面检查。这可以通过将`pageCheckSeconds`和`servlet-reload-check-secs`参数设置为-1来实现,这...
3. **Monitoring**:通过WebLogic Server控制台实时查看服务器状态,包括内存使用、线程、JVM性能等。 4. **Logging and Tracing**:配置日志和跟踪,用于故障排查和性能分析。 5. **Security**:配置用户、角色、...
在进行性能调优时,我们需要关注几个核心方面,包括理解性能目标、调整操作系统、优化数据库以及监控和调整WebLogic Server自身的配置。 1. **理解性能目标**: - 用户数:了解系统需要同时处理的并发用户数量,这...
WebLogic Server提供多种性能调优选项,如线程池配置、内存管理、JVM参数调整等。理解这些设置对于提升服务器性能至关重要。 六、培训价值 Oracle WebLogic Server培训旨在帮助学员掌握其基本操作、高级特性、故障...
修改默认执行队列线程数是指调整 Weblogic Server 中的默认执行队列线程数,以确保服务器的性能和稳定性。可以通过配置工作负荷管理器来修改默认执行队列线程数。 7.工作负荷管理器应用 工作负荷管理器应用是指将...
7. **性能优化**:指南会涵盖内存调优、线程池配置、JVM参数调整等内容,帮助提升WebLogic Server的性能和响应速度。 8. **故障恢复与备份**:了解如何备份和恢复WebLogic Server的配置,以及在出现故障时进行恢复...
5. **性能调优**:针对WebLogic Server的性能优化是本书的重点,包括JVM参数调整、内存管理、线程池配置、数据库连接池设置等,帮助你提升应用的响应速度和处理能力。 6. **安全管理**:WebLogic Server提供了丰富...
【WebLogic Server 9.2 集群配置详解】 WebLogic Server 9.2 集群配置是一项关键的任务,旨在...在实际环境中,还可能需要进一步调整负载均衡策略、故障检测和恢复设置,以及监控和管理工具,以优化集群性能和稳定性。
7. **性能调优**:了解如何针对WebLogic Server进行性能优化,包括内存设置、线程池配置、数据库连接池调整等,以提高系统的响应速度和处理能力。 通过学习"J2EE 应用与 BEA WebLogic Server",开发者不仅可以掌握...
总结,WebLogic Server的配置和性能调优是一个综合性的任务,需要结合系统架构、硬件资源和业务需求进行细致的规划和调整。通过合理的配置和持续的优化,可以确保WebLogic Server在复杂的企业环境中高效、稳定地运行...
- **集群**:为了提高可用性和性能,WebLogic Server支持将多个服务器实例组织成集群,负载均衡和故障转移都在集群级别实现。 - **部署单元**:应用程序、EJB(Enterprise JavaBeans)、Web服务等都是部署单元,...