Tuning Linux systems for WebSphere Application Server 6.0.x
January 10, 2008 – 6:42 pmWhen you have a performance concern, check the operating system settings to determine if these settings are appropriate for your application. Because the Linux operating system is not a WebSphere Application Server product, be aware that it can change and results can vary.
Procedure
Configure the following settings and variables according to your tuning needs:
- timeout_timewait parameter
- Description: Determines the time that must elapse before TCP/IP can release a closed connection and reuse its resources. This interval between closure and release is known as the TIME_WAIT state or twice the maximum segment lifetime (2MSL) state. During this time, reopening the connection to the client and server cost less than establishing a new connection. By reducing the value of this entry, TCP/IP can release closed connections faster, providing more resources for new connections. Adjust this parameter if the running application requires rapid release, the creation of new connections, and a low throughput due to many connections sitting in the TIME_WAIT state.
- How to view or set:Issue the following command to set the timeout_timewait parameter to 30 seconds:
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
- SUSE Linux Enterprise Server 8 (SLES
SP2A - sched_yield_scale tuning
- Description: The Linux scheduler is very sensitive to excessive context switching, so fixes are integrated into the SLES 8 kernel distribution to introduce delay when a thread yields processing. This fix is automatically enabled in SLES 8 SP3, but must be enabled explicitly in SLES 8 SP2A or later.
- How to view or set:
- Upgrade your SLES 8 service pack to SP2A.
- Issue the sysctl -w sched_yield_scale=1 command .
- Default value: 0
- Recommended value: 1
- RedHat Advanced Server 2.1 kernel update
- Description: Kernel updates for RedHat Advanced Server 2.1 implemented changes that affect WebSphere Application Server performance, especially memory-to-memory HTTP session replication.
- How to view or set:
- Issue the uname -a command
- If you are running any kernel prior to 2.4.9-e.23, upgrade at least to the RedHat Advanced Server 2.1 kernel, but preferably to the latest supported.
- Default value: 2.4.9-e.3
- Recommended value: 2.4.9-e.23
- Linux file descriptors (ulimit)
- Description: Specifies the number of open files that are supported. The default setting is typically sufficient for most applications. If the value set for this parameter is too low, a file open error, memory allocation failure, or connection establishment error might be displayed.
- How to view or set: Check the UNIX reference pages on the ulimit command for the syntax of different shells. To set the ulimit command to 8000 for the KornShell shell (ksh), issue the ulimit -n 8000 command. Use the ulimit -a command to display the current values for all limitations on system resources.
- Default value: For SUSE Linux Enterprise Server 9 (SLES 9), the default is 1024.
- Recommended value: 8000
- Connection backlog
- Description: Change the following parameters when a high rate of incoming connection requests result in connection failures:
echo 3000 > /proc/sys/net/core/netdev_max_backlog echo 3000 > /proc/sys/net/core/somaxconn
- Description: Change the following parameters when a high rate of incoming connection requests result in connection failures:
- TCP_KEEPALIVE_INTERVAL
- Description: Determines the wait time between isAlive interval probes.
- How to view or set: Issue the following command to set the value:
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
- Default value: 75 seconds
- Recommended value: 15 seconds
- TCP_KEEPALIVE_PROBES
- Description: Determines the number of probes before timing out.
- How to view or set: Issue the following command to set the value:
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
- Default value: 9 seconds
- Recommended value: 5 seconds
- Allocating large pages for Java virtual machine (JVM) heap (tested with SLES 9)Some applications require a very large heap for optimal performance. The CPU overhead of managing a large heap can be reduced by using the “large page” support that is provided by the CPU and operating system. The following example assumes a large page size of 4MB and a desired heap size of 2300MB.
- Set the following three settings by a sysctl.conf file, typically located at /etc/sysctl.conf.
Note: You must have root privilege access to modify this file. Also, verify the file is not marked as read-only before attempting to make changes.
- Set the number of large pages (2300MB = 575 * 4MB) by issuing the following command:
vm.nr_hugepages = 575
- Set the maximum shared segment size to 2300MB plus a little more (about 95MB) (2511724800 = 2300MB * 1048576 bytes/MB + 100000000 bytes) by issuing the following command:
kernel.shmmax = 2511724800
- Set the total amount of memory to be shared by issuing the following command:
kernel.shmall = 2511724800
- Set the number of large pages (2300MB = 575 * 4MB) by issuing the following command:
- Specify the -Xlp JVM option so the JVM heap can utilize large pages.
- Set the Xmx JVM option to 2300MB.
- Relocate the program text to a lower virtual memory address (0×10000000) to provide more address space for a larger heap. On SUSE Linux Enterprise Server 9 , run the following command to relocate the text in the script that invokes the JVM or in a .profile file:
echo "0x10000000" > /proc/self/mapped_base
- Set the following three settings by a sysctl.conf file, typically located at /etc/sysctl.conf.
You must be logged in to post a comment.