Performance and Tuning
Introduction and Roadmap
Document Scope and Audience
Guide to this Document
Performance Features of this Release
One-Way Sends for Non-Persistent Messages
Related Documentation
Top Tuning Recommendations for WebLogic Server
Tune Pool Sizes
Use the Prepared Statement Cache
Use Logging Last Resource Optimization
Tune Connection Backlog Buffering
Tune the Chunk Size
Use Optimistic or Read-only Concurrency
Use Local Interfaces
Use eager-relationship-caching
Tune HTTP Sessions
Tune Messaging Applications
Performance Tuning Roadmap
Performance Tuning Roadmap
Understand Your Performance Objectives
Measure Your Performance Metrics
Monitor Disk and CPU Utilization
Monitor Data Transfers Across the Network
Locate Bottlenecks in Your System
Minimize Impact of Bottlenecks
Tune WebLogic Server Performance Parameters
Achieve Performance Objectives
Tuning Tips
Operating System Tuning
Basic OS Tuning Concepts
Solaris Tuning Parameters
Setting TCP Parameters With the ndd Command
Setting Parameters In the /etc/system File
CE Gigabit Network Card Settings
Additional Solaris Tuning Information
Linux Tuning Parameters
HP-UX Tuning Parameters
Windows Tuning Parameters
Other Operating System Tuning Information
Tuning Java Virtual Machines (JVMs)
JVM Tuning Considerations
Which JVM for Your System?
Changing To a Different JVM
Garbage Collection
VM Heap Size and Garbage Collection
Choosing a Garbage Collection Scheme
Using Verbose Garbage Collection to Determine Heap Size
Specifying Heap Size Values
Java HotSpot VM Heap Size Options
Automatically Logging Low Memory Conditions
Manually Requesting Garbage Collection
Requesting Thread Stacks
Enable Spinning for IA32 Platforms
Sun JDK
JRockit
Tuning WebLogic Server
Setting Java Parameters for Starting WebLogic Server
Development vs. Production Mode Default Tuning Values
Thread Management
Tuning a Work Manager
How Many Work Managers are Needed?
What are the SLA Requirements for Each Work Manager?
Tuning Execute Queues
Understanding the Differences Between Work Managers and Execute Queues
Migrating from Previous Releases
Tuning the Stuck Thread Detection Behavior
Tuning Network I/O
Tuning Muxers
Which Platforms Have Performance Packs?
Enabling Performance Packs
Changing the Number of Available Socket Readers
Network Channels
Tuning Message Size
Tune the Chunk Parameters
Tuning Connection Backlog Buffering
Setting Your Compiler Options
Compiling EJB Classes
Setting JSP Compiler Options
Using WebLogic Server Clusters to Improve Performance
Scalability and High Availability
How to Ensure Scalability for WebLogic Clusters
JNDI Binding, Unbinding and Rebinding
Performance Considerations When Running Multiple Server Instances on Multi-CPU Machines
Monitoring a WebLogic Server Domain
Using the Administration Console to Monitor WebLogic Server
Using JMX to Monitor WebLogic Server
Using WLST to Monitor WebLogic Server
Third-Party Tools to Monitor WebLogic Server
Tuning the WebLogic Persistent Store
Overview of Persistent Stores
Using the Default Persistent Store
Using Custom File Stores and JDBC Stores
Using JMS Paging Stores
Best Practices When Using Persistent Stores
Tuning JDBC Stores
Tuning File Stores
DataBase Tuning
General Suggestions
Database-Specific Tuning
Oracle
Microsoft SQL Server
Sybase
Tuning WebLogic Server EJBs
General EJB Tuning Tips
Tuning EJB Caches
Tuning the Stateful Session Bean Cache
Tuning the Entity Bean Cache
Tuning the Query Cache
Tuning EJB Pools
Tuning the Stateless Session Bean Pool
Tuning the MDB Pool
Tuning the Entity Bean Pool
CMP Entity Bean Tuning
Use Eager Relationship Caching
Use JDBC Batch Operations
Tuned Updates
Using Field Groups
include-updates
call-by-reference
Bean-level Pessimistic Locking
Concurrency Strategy
Tuning In Response to Monitoring Statistics
Cache Miss Ratio
Lock Waiter Ratio
Lock Timeout Ratio
Pool Miss Ratio
Destroyed Bean Ratio
Pool Timeout Ratio
Transaction Rollback Ratio
Transaction Timeout Ratio
Tuning Message-Driven Beans
Use Transaction Batching
MDB Thread Management
Determining the Number of Concurrent MDBs
Selecting a Concurrency Strategy
Thread Utilization When Using WebLogic Destinations
Using Foreign Vendor MDBs
Determining Concurrency for Foreign MDBs
Thread Utilization When Using Foreign MDBs
Token-based Message Polling for Transactional MDBs Listening on Queues
Backwards Compatibility for WLS 10.0 and Earlier-style Polling
Tuning JDBC Applications
Tune the Number of Database Connections
Waste Not
Use Test Connections on Reserve with Care
Cache Prepared and Callable Statements
Using Pinned-To-Thread Property to Increase Performance
Use Best Design Practices
Tuning Logging Last Resource
What is LLR?
LLR Tuning Guidelines
Tuning WebLogic JMS
Defining Quota
Quota Resources
Destination-Level Quota
JMS Server-Level Quota
Blocking Senders During Quota Conditions
Defining a Send Timeout on Connection Factories
Specifying a Blocking Send Policy on JMS Servers
Tuning for Large Messages
Tuning MessageMaximum
Tuning MessageMaximum Limitations
Setting Maximum Message Size on a Client
Compressing Messages
Paging Out Messages To Free Up Memory
Specifying a Message Paging Directory
Tuning the Message Buffer Size Option
Controlling the Flow of Messages on JMS Servers and Destinations
How Flow Control Works
Configuring Flow Control
Flow Control Thresholds
Handling Expired Messages
Defining a Message Expiration Policy
Configuring an Expiration Policy on Topics
Configuring an Expiration Policy on Queues
Configuring an Expiration Policy on Templates
Defining an Expiration Logging Policy
Tuning Active Message Expiration
Configuring a JMS Server to Actively Scan Destinations for Expired Messages
Tuning Applications Using Unit-of-Order
Best Practices
Using UOO and Distributed Destinations
Migrating Old Applications to Use UOO
Using One-Way Message Sends For Improved Non-Persistent Messaging Performance
Configure One-Way Sends On a Connection Factory
One-Way Send Support In a Cluster With a Single Destination
One-Way Send Support In a Cluster With Multiple Destinations
When One-Way Sends Are Not Supported
Different Client and Destination Hosts
XA Enabled On Client's Host Connection Factory
Change In Server Security Policy
Change In JMS Server or Destination Status
Looking Up Logical Distributed Destination Name
One-Way Send QOS Notes
Tuning Destination Performance
Messaging Performance Configuration Parameters
Compatibility With the Asynchronous Message Pipeline
Tuning WebLogic JMS Store-and-Forward
Best Practices
Tuning Tips
Tuning WebLogic Message Bridge
Best Practices
Changing the Batch Size
Changing the Batch Interval
Changing the Quality of Service
Using Multiple Bridge Instances
Changing the Thread Pool Size
Avoiding Durable Subscriptions
Co-locating Bridges with Their Source or Target Destination
Changing the Asynchronous Mode Enabled Attribute
Tuning Resource Adapters
Classloading Optimizations for Resource Adapters
Connection Optimizations
Thread Management
InteractionSpec Interface
Tuning Web Applications
Best Practices
Disable Page Checks
Use Custom JSP Tags
Precompile JSPs
Use Service Level Agreements
Related Reading
Session Management
Managing Session Persistence
Minimizing Sessions
Aggregating Session Data
Tuning Web Services
Web Services Best Practices
Tuning Web Service Reliable Messaging Agents
Tuning Heavily Loaded Systems to Improve Web Service Performance
Setting the Buffering Sessions
Releasing Asynchronous Resources
Tuning WebLogic Tuxedo Connector
Configuration Guidelines
Best Practices
Related Reading: Performance Tools and Information
WebLogic Information
Sun Microsystems Information
Linux OS Information
Hewlett-Packard Company Information
Microsoft Information
Web Performance Tuning Information
Network Performance Tools
Load Testing Tools
Performance Analysis Tools
Production Performance Management
Benchmarking Information
Java Virtual Machine (JVM) Information
Enterprise JavaBeans Information
WebLogic Store Information
Java Message Service (JMS) Information
Java Database Connectivity (JDBC) Information
General Performance Information
Using the WebLogic 8.1 Thread Pool Model
How to Enable the WebLogic 8.1 Thread Pool Model
Tuning the Default Execute Queue
Should You Modify the Default Thread Count?
Using Execute Queues to Control Thread Usage
Creating Execute Queues
Modifying the Thread Count
Tuning Execute Queues for Overflow Conditions
Assigning Servlets and JSPs to Execute Queues
Assigning EJBs and RMI Objects to Execute Queues
Monitoring Execute Threads
Allocating Execute Threads to Act as Socket Readers
Setting the Number of Socket Reader Threads For a Server Instance
Setting the Number of Socket Reader Threads on Client Machines
Tuning the Stuck Thread Detection Behavior
Capacity Planning
Capacity Planning Factors
Programmatic and Web-based Clients
RMI and Server Traffic
SSL Connections and Performance
WebLogic Server Process Load
Database Server Capacity and User Storage Requirements
Concurrent Sessions
Network Load
Clustered Configurations
Application Design
Assessing Your Application Performance Objectives
Hardware Tuning
Benchmarks for Evaluating Performance
Supported Platforms
Network Performance
Determining Network Bandwidth
Related Information