Method for autonomically tuning J2EE application performance
Original Publication Date: 2005-Apr-07
Included in the Prior Art Database: 2005-Apr-07
This article relates to an approach for automatic tuning of a Java 2 Enterprise Edition* (J2EE) application without requiring load testing to be performed by an administrator. Optimum tuning settings are automatically determined by the J2EE infrastructure; the ability to determine new tuning settings that will improve performance is only limited by spare capacity in a J2EE infrastructure and a set of tuning values to be exhaustively tested by the J2EE infrastructure.
Method for autonomically tuning J 2EE application performance
At present, determining the optimum tuning settings to apply to a J2EE application can be a time consuming, manual process. Current, solutions for this problem include:
1. Not perform any tuning testing -- apply 'rule of thumb' guidelines (e.g. "a JVM maximum heap size of around 512MB is a good starting point") -- this leads to less than optimal tuning, particularly when many settings need to be changed.
2. Perform tuning testing using a HTTP load test tool and reviewing test results after each test run. At the conclusion of a test run a change is made to a tuning setting, and the load tests are rerun. This can be a laborious process since each test will often take half an hour or more, and an administrator must change the settings being tested within the application server after each test run. Often testing more test cases is desirable (for example, to test the interaction between different tuning settings); however the requirement to have an administrator change settings between test runs and interpret the results means that such testing is often curtailed for time and cost reasons long before the optimal values have been found.
3. Using the internal performance tuning advisors within a J2EE Application Server. While useful as a short list of best practices or to identify areas that require tuning. These advisors are not able to provide tuning advice that has already been previously tested on a given application on settings such as JVM Heap Size which can only be definitively determined by trial and error, requiring a restart of an application server on each run. These tools are also not able to generate load to allow a given set of tuning settings to be exhaustively tested -- these tools cannot automatically replay the same load nor actually test the outcome of changes to tuning settings.
Thus, an additional solution is required to dramatically improve this time consuming and expensive manual process.
The approach proposed here autonomically tunes a J2EE application by taking advantage of spare capacity in a J2EE infrastructure to deploy simulated application servers and load test agents. These load test agents replay load that has been received by the production application against the simulated application servers, exhaustively testing various tuning parameters such as JVM Heap Size. As the results for load tests are known, and the optimum settings identified, these settings are applied to the production application servers or into a list for review by an administrator.
The key advantages of this approach are: elimination of the need to manually construct load test cases for input into a load test tool -- the load test cases are automatically created from production load elimination of the need for a laborious tuning process where an administrator must exhaustively test values of different settings -- the testing can be performed automatically using spare capacity ...