1. Field of the Invention
This invention relates to computer systems and, more particularly, to automated configuration and deployment of computer systems applications.
2. Description of the Related Art
Modern enterprise-level computer applications are typically designed to be multi-threaded in order to take advantage of the multiple processors available on typical enterprise servers and in clustered computing environments. Multi-threaded applications may also help improve overall performance in single-processor systems, where for example an application can switch from a blocked thread to a non-blocked thread to maintain optimal execution. However, the task of tuning applications for optimal execution on multiprocessor and/or clustered systems has long been known to be a non-trivial and often expensive task. Enterprise application vendors usually have entire departments dedicated to tuning applications for marketing-related performance benchmarking. In addition, performance tuning specialists may also be deployed at customer sites, e.g., to ensure that a deployment of the enterprise application in a production environment meets desired performance goals.
Many applications are developed for deployment in platform-independent virtual machine environments, such as Java™ Virtual Machines or JVMs. For example, vendors such as IBM, BEA Systems, and the like provide Java™ 2 Enterprise Edition (J2EE)-compliant application servers, at which enterprise and web applications written using platform-independent programming languages such as Java™ may be deployed. Application servers may be configurable for use in clustered environments, where for example one or more instances of a JVM is executed at each node of a cluster of computer servers. Application servers may provide built in support for commonly used services such as transactions, security, database connectivity, etc., thus allowing application developers to focus on application functionality instead of redeveloping infrastructure services. Using platform-independent application server technology, enterprise application vendors may also be able to reduce development and testing costs associated with supporting applications on different hardware and operating systems. At least in theory, applications may only have to be developed and tested on one platform, instead of, for example, being ported to multiple platforms and tested separately for each platform. However, the problem of tuning applications for performance remains complicated even in application server environments.
Application performance may be sensitive to a variety of factors. In particular, the throughput and response time for service requests handled by an application may be sensitive to a number of tunable concurrency configuration parameters, such as the number of concurrent threads allocated for application use within a JVM of an application server. If the number of threads is set to too high a value, the application may incur substantial processing overhead due to frequent context switches, and may also use excessive memory. If the number of threads is set too low, the processors of the hardware platform at which the JVM is deployed may be underutilized. Current best practice guidelines provided by many vendors suggest that the optimal number of threads should be selected by observing the effect of different loads against the application using different values of the configuration parameters. Unfortunately, this typically involves expensive and time-consuming iterations of manually supervised testing. The amount of time and resources needed to identify suitable concurrency configuration parameters using such conventional techniques may be prohibitive, especially for automated provisioning environments where applications may have to be automatically migrated and deployed at different types of computing platforms.