WebSphere Portal 6.1.X Performance Tuning Guide
- Overview
- 32-bit vs 64-bit JVMs
- Hardware multithreading (hyper-threading)
- Base portal tuning
- JVM initial and maximum heap size
- JVM heap large page
- JVM large page tuning on aix operating system
- JVM heap new area size
- Additional sun jvm arguments
- Session timeout
- Web container thread pool size
- Base security attribute propagation
- VMM context pooling
- Orb service tuning for z/os
- WebSphere portal services
- Navigator service
- Registry service
- Cache manager service
- Datasource tuning for db2
- DB2 database server tuning
- DB2 on aix setup
- Recommended database maintenance for db2 luw
- Planning for oracle enterprise edition database
- Oracle on aix setup
- Oracle enterprise edition database parameter tuning
- Recommended oracle database maintenance
- Other database
- Directory Server Tuning
- Web Server Tuning
- AIX network tuning
- Linux - network tuning
- Windows 2003 network tuning
- Solaris network tuning
- Kernel tuning
Overview
Basic performance tuning...
- Begin with a baseline
- Monitor the performance metrics to determine if any parameters should be changed
- When a change is made, monitor the performance metrics to determine the effectiveness of the change.
Components to tune...
- Application server
- Database(s) and database server
- Directory server and its database
- Web server and/or proxy server
- Operating system and network
- WebSphere Portal services
32-bit and 64-bit JVMs
64-bit JVMs use a significantly larger address space, with heap sizes of 2.5GB or larger possible. This is especially useful for memory intensive applications.
One disadvantage of 64-bit JVMs is that Java objects, which typically contain multiple memory references, are larger in a 64-bit JVM than compared to a 32-bit JVM. Therefore a 64-bit JVM will need a larger heap than a 32-bit JVM for the same population of objects.
The increased size of instructions and memory references increases demand on the memory subsystem of the system, causing more cache misses and a higher demand for memory bandwidth. As a result, executing a set of operations in a 64-bit JVM can be slower than executing the same operations in a 32-bit JVM.
If you expect a high demand for memory, the best performance will probably come from a 64-bit JVM. On the other hand, if the memory demand is lower, a 32-bit JVM is likely to give superior performance.
See also:
HARDWARE MULTITHREADING (HYPER-THREADING)
Hyper-Threading (HT) on Intel processors and Simultaneous Multithreading (SMT) on Power-series processors provides an improvement in capacity in all of the scenarios and platforms, so we would recommend its use on platforms where this is an option.
BASE PORTAL TUNING
The Base Portal Scenario covers...
- user login
- page navigation
- interaction with simple portlets
Users can see a small set of pages, some of which are visible to all authenticated users, with access to others based on their group membership.
JVM INITIAL AND MAXIMUM HEAP SIZE
How-To Set: In the WebSphere Administrative Console:
Servers | Application Servers | WebSphere Portal | Server Infrastructure: Java and Process Management | Process Definition | Java Virtual MachineWhen setting the heap size for an appserver, keep the following in mind:
- Verify the system has enough physical memory for all of the processes to fit into physical memory, plus enough for the operating system. When more memory is allocated than the physical memory in the system, paging will occur, and this can result in very poor performance.
- For the gencon garbage collection policy available in 1.5 IBM JDK to avoid heap fragmentation, set the minimum and maximum heap sizes
When using portlets which have larger memory requirements, or for continuous operation, it may be possible to reduce heap fragmentation by setting the initial heap size larger.
- After doing any tuning of heap sizes, monitor the system to make sure that paging is not occurring.
- 32-bit operating systems have an address space limit of 4GBytes, regardless of the amount of physical memory in the system. This space limits the maximum size of each individual process in the system. In addition, some operating systems restrict the size of processes to be even less than this limit. Many versions of Windows limit processes to 2GBytes in size.
- The address space limit further restricts the size of the JVM process. If the process grows larger than the limit imposed by the operating system, it may terminate unexpectedly.
There is a balance between JVM heap and native memory, all of which must fit within the 2GB restriction in 32-bit Windows. 1408MB might be the largest value you can use to successfully measure all of our Windows configurations and workloads. If your application has additional native memory requirements then you may need to choose a smaller maximum heap size.
On Solaris and zLinux, you can use 3.5GB heap size in 64-bit environment.
Parameter AIX POWER5 Linux Solaris Windows 2003 z/Linux z/OS Initial and Maximum heap size (Mbytes) 1792 2048 3584 1408 3584 2048 JVM HEAP LARGE PAGE
Large pages can reduce the CPU overhead needed to keep track of heap. With this setting we have seen 10% throughput improvement in our measurements.
How-to Set:
Servers | Application Servers | WebSphere Portal | Server Infrastructure: Java and Process Management | Process Definition | Java Virtual Machine | Generic JVM ArgumentAdd -Xlp.
This setting does improve performance on Windows, we did not set it for our measurements because Portal doesn't start reliably when -Xlp is set, sometimes it requires a system reboot to get the jvm to start.
Large pages are supported by systems running Linux kernels V2.6 or higher. See JVM Large Page Tuning for AIX Operation System.
JVM LARGE PAGE TUNING ON AIX OPERATING SYSTEM
To use JVM Large Page, AIX operating system must be configured to support large pages.
How-To Set:
- For a system with 8GB of physical memory, to allocate 4GB of RAM as large pages (16MB)...
vmo -r -o lgpg_regions=256 -o lgpg_size=16777216
bosboot -ad /dev/ipldevice
reboot -q
vmo -p -o v_pinshm=1
chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE $USER- Add: -Xlp command-line option as described above.
- In the WebSphere Administrative Console:
Servers | Application Servers | WebSphere Portal | Server Infrastructure: Java and Process Management | Process Definition | Environment Entries | New | EXTSHM=OFF- Restart Portal Server.
To verify if large pages are being used, run the AIX command...
vmstat -l 1 5...and check the "alp" column which is the active large page used. It should be a non-zero value if large pages are being used.
JVM HEAP NEW AREA SIZE
The Generational Garbage Collector introduced in Java 5.0 is efficient to Portal application JVM memory management, and it is set as default by installation with the command-line option...
-Xgcpolicy:gencon
Use -Xmn to further fine tune the Java heap new area (Nursery).
The -Xgcpolicy:gencon option does not apply to Solaris.
How To Set:
Servers | Application Servers | WebSphere Portal | Server Infrastructure: Java and Process Management | Process Definition | Java Virtual Machine | Generic JVM Arguments: -Xmn256m
Parameter AIX POWER5 Linux Solaris Windows 2003 z/Linux z/OS New Area Size -Xmn320m -Xmn256m -Xmn768m -Xmn256m -Xmn1024m -Xmn320m ADDITIONAL SUN JVM ARGUMENTS
On the Solaris platform, we use the following Java HotSpot parameters to achieve optimum performance.
Parameter Value Additional Information -server
Offers higher throughput than the "client" mode. -XX:MaxPermSize 768m
-XX:+UseConcMarkSweepGC
Use concurrent mark-sweep collection for the tenured generation. The application is paused for short periods during the collection; we found this collector works best in Portal. -XX:SurvivorRatio 6
-XX:+UseParNewGC
By default concurrent low pause collector uses the default, single threaded young generation copying collector. Set this parameter to use parallel young generation collector for new area. -XX:ParallelGCThreads 5 Reduces the number of garbage threads. On the Chip multithreading processor based system, we set the threads no higher than one quarter of the hardware threads. We also distribute the threads for 6 JVMs. Our system has 128 virtual processors, we set a total of (128/4)=32 GC threads across all the JVMs. So 5 or 6 GC threads per JVM. -XX:+PrintGCDetails
Print more details at garbage collection. This does not improve performance, but it provides additional information related to garbage collection activity, which is useful in tuning garbage collection. -XX:+PrintGCTimeStamps
Print timestamps at garbage collection. SESSION TIMEOUT
The default value of Session Timeout is 30 minutes. Reducing this value to a lower number can help reduce memory consumption requirements, allowing a higher user load to be sustained for longer periods of time. Reducing the value too low can interfere with the user experience.
For Solaris, on a T5240 hardware, we used a much lower think time, 5 seconds, than was used for other platform hardware measurement of 12 seconds. A lower thinktime results in a heavier load on the system. We lowered the thinktime to decrease the number of virtual users required for this measurement. Our pool of LoadRunner virtual user licenses was inadequate to generate enough load with the higher think time. With a shorter think time than is used in the other measurements, the duration of each virtual user's interaction with the site is shorter by approximately 2 minutes. To compensate for this, and keep the sessions live on the server for the same period of time, we increased the session timeout by 2 minutes, to 12 minutes.
How To Set: In the WebSphere Administrative Console:
Servers | Application Servers | WebSphere Portal | Container Settings: Web Container Settings | Session Management | Session Timeout | Set TimeoutWEB CONTAINER THREAD POOL SIZE
Servlet engine thread pool size: Set this value and monitor the results. Increase this value if all the servlet threads are busy most of the time.
How To Set: In the WebSphere Administrative Console:
Servers | Application Servers | WebSphere Portal | Additional Properties: Thread Pools | Web Container | Thread Pool | Minimum size threads - Maximum size threadsBASE SECURITY ATTRIBUTE PROPAGATION
To reduce the Security Attribute Propagation (SAP) overhead...
- use a custom property
- disable Callerlist
If SAP is not used, you can disable that, to remove the extra overhead to improve the login performance.
If Subject has not been customized, then there is no need to enable SAP. SAP can add extra overhead due to some extra processing that is required. However, there are certain configurations where performance might be better with security propagation enabled due to reduction of remote registry calls. See the WebSphere 6.1 InfoCenter (search for 'security attribute propagation') for a discussion of when propagating security attributes is desirable. To enable SAP for functional reasons, you can improve the performance with CallerList tuning mentioned below.
These settings apply to all platforms.
How to Set: In the WebSphere Administrative Console:
Security | Secure Administration, Applications, and Infrastructure | Custom properties
Name Value com.ibm.CSI.disablePropagationCallerList true com.ibm.CSI.rmiOutboundPropagationEnabled false com.ibm.CSI.rmiInboundPropagationEnabled false com.ibm.ws.security.webInboundPropagationEnabled false For com.ibm.CSI.disablePropagationCallerList create a new property, for the other 3 properties, modify their value to "false".
In our WAS 7 environment, we add...
com.ibm.CSI.disablePropagationCallerList = true...and use the other 3 default true attributes. For was7, this field is accessed through:
Security | Global Security | CustomProperties | NewVMM CONTEXT POOLING
Tune VMM Context Pooling to improve the performance of concurrent access to an LDAP server.
We changed Context Pooling settings in...
WP_PROFILE/config/cells//wim/config/wimconfig.xml ...by setting...
<config:contextPool enabled="true" initPoolSize="10" maxPoolSize="0" poolTimeOut="0" poolWaitTime="3000" prefPoolSize="30"/>You can also set them via the administrative console.
Context Pool Setting Default Value Value initPoolSize 1 10 prefPoolSize 3 30 Number of open connections to maintain to LDAP server.
maxPoolSize 20 0 A value of 0 allows the pool to grow as large as needed. If access to the LDAP server is shared by many systems, this setting may allow an excessive number of connections to the LDAP server; in such a case, set the maximum pool size to a value appropriate to your environment.
ORB SERVICE TUNING FOR Z/OS
How to Set: Servers | Application Servers | server1 | Orb Service | Pass by Reference
Servers | Application Servers | WebSphere_Portal | Orb Service | Pass by ReferenceWebSphere Portal Services
WebSphere Portal has a number of configurable services; each service has several parameters available to it. This section describes which services we tuned, the tuning values used, and the rationale for those changes.
How to Set:
- Edit...
WP_PROFILE/PortalServer/config/properties/xxxService.properties
- uncomment the line, then change the size.
- Run...
WP_PROFILE/ConfigEngine/ConfigEngine.sh update-properties
The changes should appear on...
WAS Console | Resource Environment Providers | WP_xxxService | Custom properties
NAVIGATOR SERVICE
The navigator service manages the content model for unauthenticated users, which controls the pages those users are able to see. This content model is periodically reloaded by WebSphere Portal; new pages which are visible to unauthenticated users will not be available until the next reload occurs. Our environment assumes a low rate of change for pages, so we set this reload to only occur once per hour. In a production environment where new pages for unauthenticated users are rarely created, setting this reload time to an hour or more will give better performance. In a test or staging environment where updates to unauthenticated pages need to be seen more often, a lower reload time is more appropriate.
This service also controls the HTTP cache-control headers which will be sent on unauthenticated pages. While our environment did not exploit HTTP page caching, increasing these cache lifetimes in a production environment can reduce load on the portal.
NavigatorService.properties
Parameter Default Value (seconds) Value Used Definition public.expires 60 3600 Cache expiration time for caches outside of WebSphere Portal and for unauthenticated portal pages. If the setting remote.cache.expiration is also set to a value greater than or equal to 0, the smaller one of the two values is used. public.reload 60 3600 Cache expiration time for the portal internal cache for unauthenticated pages remote.cache.expiration 60 28800 Cache expiration for caches outside of portal server for authenticated as well as for unauthenticated pages REGISTRY SERVICE
WebSphere Portal maintains information about many resource types in its databases. Some of these resources are replicated into memory for faster access; this is provided by the registry service. This replicated information will be periodically reloaded from the database, thus picking up any changes which may have been made on a peer node in a clustered environment.
The registry service allows configuring a reload time, in seconds, for each type of data which it is managing. In a production environment, we expect this type of information changes very infrequently, so we used very long reload times for the registry service.
RegistryService.properties
Parameter Default Value Value Used Definition default.interval 1800 28800 Reload frequency for any object types not explicitly specified in the file. bucket.application.interval 600 28800 Reload frequency for application definitions bucket.portlet.interval 600 28800 Reload frequency for portlet definitions bucket.theme.interval 3000 28800 Reload frequency for theme definitions bucket.skin.interval 3500 28800 Reload frequency for skin definitions bucket.client.interval 19000 28800 Reload frequency for client definitions bucket.markup.interval 20000 28800 Reload frequency for markup definitions bucket.transformation application.interval 600 28800 Reload frequency for transformation application definitions bucket.transformation.interval 600 28800 Reload frequency for transformation definitions CACHE MANAGER SERVICE
The cache manager service in WebSphere Portal is used to cache a wide variety of types of information in memory. These caches are somewhat similar to the registries maintained by the registry service, as each type of information gets its own cache. The key differences are:
The information stored in the cache manager service's caches tends to be more dynamic than the information stored in the registry service's registries.
The caches used by the cache manager service are limited in size, and entries will be discarded when the caches become full. The registries used by the registry service are not size-limited; they contain all entries of the specific data type.
- Expiry times are managed individually for each entry in the cache, managed by the cache manager service. In contrast, when the reload time is reached for a registry, the entire contents of that registry are reloaded.
Each cache has several configurable options. Size values below are specified in "number of objects" and lifetime values are specified in "seconds".
CacheManagerService.properties
Cache Name Default Value Value Used com.ibm.wps.model.factory.ContentModelCache.live.size 1000 2500 com.ibm.wps.ac.ExplicitEntitlements Cache.USER_GROUP.size 1000 2000 com.ibm.wps.model.factory.Navigation SelectionModelCache.live.size 1000 2500 com.ibm.wps.ac.OwnedResourcesCache.enabled true false com.ibm.wps.ac.ProtectedResourceCache.lifetime 5000 14400 com.ibm.wps.datastore.services.Identification.SerializedOidString Cache.size 2500 5000 com.ibm.wps.puma.DN_OID_Cache.size 500 5000 com.ibm.wps.puma.DN_User_Cache.size 500 3000 com.ibm.wps.puma.DN_Group_Cache.size 500 1500 com.ibm.wps.puma.OID_DN_Cache.size 1500 3000 com.ibm.wps.puma.OID_User_Cache.size 1500 3000 com.ibm.wps.puma.OID_Group_Cache.size 1500 5000 com.ibm.wps.ac.groupmanagement.NestedGroupCache.enabled true False com.ibm.wps.ac.RolesCache.enabled true False com.ibm.wps.ac.ChildResourcesCache.lifetime 7200 28800 com.ibm.wps.policy.services.PolicyCacheManager.lifetime 7780 43200 DATASOURCE TUNING FOR DB2
Multiple databases are used to hold information in WebSphere Portal V6.1. We used six separate DB2 databases, each representing a separate database domain and having their own datasources...
Database Database name Datasource name Release release reldbDS Community community commdbDS Customization custom cusdbDS Feedback fdbkdb fdbkdbDS Likeminds Lmdb lmdbDS JCR jcrdb jcrdbDS All datasources are configured in a similar manner by logging on to the WAS administrative console.
For the prepared statement cache size, the path is...
Resources | JDBC Providers | provider name | Data Sources | datasource name | Statement cache size
For the connection pool settings, the path in the WAS administrative console is...
Resources | JDBC Providers | Provider name | Data Sources | Datasource name | Connection Pools
The settings are Minimum connections and Maximum connections.
The default settings were used for the prepared statement cache size, and connection pool minimum and maximum sizes.
DB2 DATABASE SERVER TUNING
In our measurement environment, we used DB2 database server for the Portal application. The LDAP server, IBM Tivoli Directory Server also included a DB2 database as a repository, but it is largely unseen and was operated as an out of box configuration.
We recommend using a remote database server for the largest capacity. For our measurements we used IBM DB2 Enterprise Edition V9.1 fixpack 5 as our database server. WebSphere Portal V6.1 uses the concept of Database domains to designate either groups of tables belonging to one domain, or even entirely separate databases to store the data specific to each domain.
We built six separate databases within one database server to house the tables and data needed to support each domain. For the Base Portal and Many Pages measurements, the Release domain is the primary database being exercised.
The databases and related domains supported by Portal V6.1 are:
Release (release domain) Primary database domain used by the Base Portal and Many Pages Scenarios. Customization (customization domain This database receives some light traffic in our scenarios. Community (community domain This database receives some light traffic in our scenarios. JCR (JCR domain) Used heavily in WCM Scenario. This database receives light traffic in all other scenarios measured in our Benchmark report. Likeminds database Used for Likeminds enabled systems. This database is not used in the scenarios measured in our Benchmark report. Feedback database Used by the feedback subsystem. This database is not used in the scenarios measured in this report. DB2 ON AIX SETUP
We configure our DB2 database on AIX using the following setup,
- Set the filesystem which will hold the Portal databases to be a Enhanced Journal File System (JFS2) because a large file system is limited to 64GB.
- Turn on concurrent I/O (CIO) for Enhanced Journal File System as this improves performance.
To enable CIO, use the following command to mount the database fileset.
mount -o cio /portaldb- Increase AIX maximum number of processes per user to 4096.
The default 500 processes per user is too low for database server, we increase it to 4096 in our AIX environment. To increase it,
chdev -l sys0 -a maxuproc=.4096.RECOMMENDED DATABASE MAINTENANCE FOR DB2 LUW
Two of the database attributes, which DB2 relies upon to perform optimally, are...
- database catalog statistics
- physical organization of the data in the tables
Catalog statistics should be recomputed periodically during the life of the database, particularly after periods of heavy data modifications (inserts, updates, and deletes) such as a population phase. Due to the heavy contention of computing these statistics, IBM recommends performing this maintenance during off hours, periods of low demand, or when the portal is off-line. The DB2 runstats command is used to count and record the statistical details about tables, indexes and columns. We have used two techniques in our environment to recompute these statistics. The form IBM recommends is:
db2 runstats on table tableschema.tablename...on all columns with distribution on all columns and sampled detailed indexes all allow write access
These options allow the optimizer to determine optimal access plans for complex SQL.
A simpler, more convenient technique for recomputing catalog statistics is:
db2 reorgchk update statistics on table allNot only does this command count and record some of the same catalog statistics, it also produces a report that can be reviewed to identify table organization issues. However, we have found instances where this produces insufficient information for the optimizer to select an efficient access plan for complex SQL, particularly for queries of the JCR database.
We have determined a technique that has the same convenience of the reorgchk command and provides the detailed statistics preferred by the optimizer.
db2 -x -r "runstats.db2" "select rtrim(concat('runstats on table ',concat(rtrim(tabSchema),concat('.',concat(rtrim(tabname),' on all columns with distribution on all columns and sampled detailed indexes all allow write access'))))) from syscat.tables where type='T'"
db2 -v -f "runstats.db2"The first command is used to create a file, runstats.db2, which contains all of the runstats commands for all of the tables. The second command uses the db2 command processor to run these commands.
To determine which tables might benefit from reorganization, we use the command:
db2 reorgchk current statistics on table all > "reorgchk.txt"For those tables which require reorganization, we use the command:
db2 reorg table tableschema.tablename...to reorganize the table based upon its primary key.
You should also verify the database servers have adequate numbers of disks. Multiple disks allow for better throughput by the database engine. Throughput is also improved by separating the database logs onto separate physical devices from the database.
You should ensure that the database parameter MaxAppls is greater than the total number of connections for both the datasource and the session manager for each WebSphere Portal appserver instance. If MaxAppls is not large enough, you will see exceptions in your connection pools.
You should use System Managed Storage (SMS) for temporary table spaces to benefit complex SQL which require temporary tables to compute their result sets. This saves time in buffer writes and improves disk utilization.
PLANNING FOR ORACLE ENTERPRISE EDITION DATABASE
For our Solaris platform measurements we also used Oracle 10g R2 as our database server. WebSphere Portal V6.1 uses the concept of Database domains to designate either groups of tables belonging to one domain, or even entirely separate databases to store the data specific to each domain.
On Oracle, we built a single database and create Oracle users to own the tables and data needed to support each domain. The domains are listed in PortalDatabaseDomain, above. For the Base Portal measurements, the Release domain is the primary database being exercised.
Here are the key choices we have implemented in our Oracle database.
- To avoid I/O contention and allow for better throughput, you should ensure your database server have adequate number of disks. Our database is on seven stripped disks.
- For better management and performance of storage structures, Oracle-Managed Files are used for database, as well as redo logs, and control files.
- Database block size: 8k
- The following tablespace sizing was required to support roughly a medium sized Portal, with 100,000 authenticated users, approximately 180 installed portlets and 220 pages, which the load generally consisting of database read operations. We recommend monitoring your tablespace sizing and growth on a regular basis. We used DBCA to create database with the following Tablespace size:
SYSAUX 800MB SYSTEM 800MB TEMP 800MB UNDOTBS 1024MB USERS 2048MB - Redo log groups: 500MB each.
ORACLE ON AIX SETUP
We configure our Oracle database on AIX using the following setup,
- Set the filesystem which will hold the Portal databases to be a Enhanced Journal File System (JFS2).
- Turn on concurrent I/O (CIO) for database filesystem as this improves performance. Do not enable CIO for Oracle product filesystem, ie, /u01, as Oracle could fail to start.
To enable CIO, use the following command to mount the database fileset.
mount -o cio /u02- Increase AIX maximum number of processes per user to 4096.
The default 500 processes per user is too low for database server, we increase it to 4096 in our AIX environment. To increase it,
chdev -l sys0 -a maxuproc='4096'- Enable AIX async I/O, and increase MinServer to 5.
smitty aio --> Change/Show Characteristics of Async I/O --> MinServers = 5- We also set in oracle user's profile as Oracle Installation Guide for AIX recommends, AIXTHREAD_SCOPE=S
ORACLE ENTERPRISE EDITION DATABASE PARAMETER TUNING
Below is a list of tuning applied on our Oracle database server with the alter system command. Additional database tuning maybe needed in your production environments. For further information on Oracle database tuning, refer to Oracle Performance Tuning Guide
Command used:
Alter system set parameter scope=spfile;Oracle Database Tuning...
Parameter Value sessions 900 sga_target 1813M pga_aggregate_target 604M processes 750 open_cursors 1500 db_files 1024 RECOMMENDED ORACLE DATABASE MAINTENANCE
Optimizer statistics are a collection of data about the database and the objects in the database, these statistics are used by the query optimizer to choose the best execution plan for each SQL statement. Because the objects in a database can be constantly changing, statistics must be regularly updated so that they accurately describe these database objects, particularly after periods of heavy data modifications (inserts, updates, and deletes) such as a population phase. We have used the following commands in our environment to recompute these statistics:
execute dbms_stats.gather_database_stats(dbms_stats.auto_sample_size, method_opt=>'FOR ALL INDEXED COLUMNS SIZE AUTO',cascade=>TRUE);OTHER DATABASE CONSIDERATIONS
WebSphere Portal maintains some information about users in its database tables, which grow when a user first logs in. We were interested in the steady-state performance of WebSphere Portal, not the performance of a user's first login to the site. Therefore our performance evaluates after all users logged in at least one time.
One of the most important database tuning factors is bufferpool sizing. It is important to evaluate the database's physical versus logical reads and size the bufferpools to achieve as much as a 95% logical read rate if possible.
Directory Server Tuning
Our measurements used IBM Tivoli Directory Server versions 6.0 as the directory server. These products use a database for storing user information; DB2 Enterprise Server was used for this database in our environment. This database is typically located on the same system as the directory server. If your workload involves creating, updating, or deleting users, then database maintenance described above may be needed on this database.
The following table shows the tuning values used for the directory servers in our Solaris Base Portal Scenario measurements
How-to-Set: These values are in...
/opt/IBM/ldap/V6.0/etc/SchemaV6.0/ibmslapd.confYou must restart the LDAP server after changing these values.
Parameter Value Ibm-slapdACLCacheSize 250000 Ibm-slapdEntryCacheSize 250000 Ibm-slapdFilterCacheSize 250000 Ibm-slapdFilterCacheBypassLimit 7500 The IBM Tivoli Directory Server uses IBM DB2 as the database server. The database instance and alias are named IDSLDAP. We applied the following tuning to this database:
db2 "update db config for idsldap using dbheap 4800"
db2 "update db config for idsldap using num_ioservers 10"
db2 "update db config for idsldap using num_iocleaners 5"
db2 alter bufferpool LDAPBP size 3690
db2 alter bufferpool IBMDEFAULTBP size 88500Web Server Tuning
We used IBM HTTP Server 6.1 in our measurement environment. The cluster configuration and the Solaris configuration has a remote web server, find the tuning in Web Server Tuning in Cluster Tuning section. All other configurations have the web server running on the same system as the WebSphere Portal appserver. If, during your monitoring, you notice insufficient processor capacity on the system when running the web server and the portal appserver on a single system, consider separating the servers onto different systems. We used the following tuning on our web servers:
Parameter AIX POWER5 Linux Windows 2003 z/Linux Additional Information KeepAliveTimeout 5 5 5 5 This value is less than the think time defined in our scripts to ensure that testing is conservative. Each user is assumed to open a new TCP connection for each page view. However, in a live environment, it can be helpful to increase the KeepAlive Timeout. A higher timeout value can increase contention for HTTP server processes, if you are running out of HTTP processes, decrease this value. ThreadsPerChild 25 25 2000 25 The higher number of threads per child on Windows is due to a different process model for IHS on Windows. MaxKeepAliveRequests 0 0 0 0 Select 0 lets an unlimited number of requests on a single TCP connection. MaxRequestsPerChild 0 0 0 0
StartServers 2 2 N/A 2
Access logging off off off off This was turned off by commenting out the following configuration line: CustomLog /usr/HTTPServer/logs/access_log common ThreadLimit 25 25 2000 25
ServerLimit 150 120 N/A 180 Set it to: MaxClient/ThreadsPerChild. MinSpareThreads 25 25 N/A 25
MaxSpareThreads 3750 4500 N/A 4500 Set it same as MaxClients. MaxClients 3750 4500 N/A 4500
We also enabled the server-status module so that we could monitor the number of running and available Web server processes. This enables appropriate tuning of the MaxClients and ThreadsPerChild parameters.
AIX NETWORK TUNING
Use...smitty | Performance and Resource Scheduling | Tuning Kernel and Network Parameters | Tuning Network Option Parameters | Change/Show Current ParametersThese will take effect immediately, improving the network layer performance in high volume environments.
Then remember to "Save current parameters for Next Boot".
Parameter Value tcp_sendspace 131072 tcp_recvspace 131072 udp_sendspace 65536 udp_recvspace 655360 somaxconn 10000 tcp_nodelayack 1 rfc1323 1 LINUX - NETWORK TUNING
For Red Hat Linux and z/Linux (Suse Linux on zOS), we add the following settings to...
/etc/sysctl.conf...then run the command...
sysctl -pTo inspect current TCP parameters, run...
sysctl -a | fgrep tcp
Parameter Value net.ipv4.ip_forward 0 net.ipv4.conf.default.rp_filter 1 net.ipv4.conf.default.accept_source_route 0 net.core.rmem_max 16777216 net.core.wmem_max 16777216 net.ipv4.tcp_rmem 4096 87380 16777216 net.ipv4.tcp_wmem 4096 65536 16777216 net.ipv4.tcp_fin_timeout 30 net.core.netdev_max_backlog 3000 net.core.somaxconn 10000 net.ipv4.tcp_keepalive_intvl 15 net.ipv4.tcp_keepalive_probes 5 WINDOWS 2003 NETWORK TUNING
Use the regedit command, the following registry settings were made in the section...
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Create a new REG_DWORD named below.
Parameter Value MaxFreeTcbs dword:00011940 MaxHashTableSize dword:0000ffff MaxUserPort dword:0000fffe TcpTimedWaitDelay dword:0000001e TcpWindowSize dword:0000ffff (65535) SOLARIS NETWORK TUNING
For Solaris, use the ndd command to set the following TCP layer parameters. These will take effect immediately, improving the network layer performance in high-volume environments. We use the following settings in Portal server running Solaris 10:
How-to-Set:
ndd -set /dev/tcp <PARAMETER> <VALUE>
Parameter Value tcp_time_wait_interval 60000 tcp_keepalive_interval 15000 tcp_fin_wait_2_flush_interval 67500 tcp_conn_req_max_q 16384 tcp_conn_req_max_q0 16384 tcp_xmit_hiwat 400000 tcp_recv_hiwat 400000 tcp_cwnd_max 2097152 tcp_ip_abort_interval 60000 tcp_rexmit_interval_initial 4000 tcp_rexmit_interval_max 10000 tcp_rexmit_interval_min 3000 tcp_max_buf 4194304 KERNEL TUNING
Our Portal Server is running on Solaris 10. In Solaris 10, we use the following "projmod" commands to set system parameters. After making the changes, we must logout then login to take these changes into effect.
To examine your current settings...
cat /etc/projectprojmod -s -K 'project.max-shm-memory=(privileged,4294967296,deny)' user.root
projmod -s -K 'project.max-shm-ids=(privileged,1024,deny)' user.root
projmod -s -K 'project.max-sem-ids=(privileged,1024,deny)' user.root
projmod -s -K 'process.max-sem-nsems=(privileged,4098,deny)' user.root
projmod -s -K 'process.max-sem-ops=(privileged,16384,deny)' user.root
projmod -s -K 'process.max-file-descriptor=(privileged,16384,deny)' user.root