Introduction
When asked to look into performance issues with a SOA Suite installation, we commonly start by collecting log files from the various system components, looking for clues on any errors or points of contention. The more advanced among us may even have collected Java garbage collection logs and runtime data, and then reviewed it for the same reasons. We encourage these actions as a starting point, but what do we do when the information isn't available in log files? The goal of this chapter is to bridge the gap between knowing there's an issue and identifying it, by introducing a range of tools and techniques for looking at scenarios, before thinking about how to take a remedial action.
The remainder of this book contains a number of recipes that will help you improve the performance of your SOA Suite application by tuning various aspects of the infrastructure, but the changes will generally only make a difference in the area in which the application is slow.
The first step in being able to performance tune your SOA Suite application is to be able to identify where the performance bottlenecks are. Performance is always governed by the availability of resources, and there is always some bottleneck in an application, which prevents it from performing faster. These resources can include the following:
CPU time
Network bandwidth
Input/Output (IO) time
Memory
Availability of data to process
Memory is not generally a significant bottleneck on its own, but not having enough memory available to your SOA Suite application results in excessive Java garbage collection, which is a CPU-intensive activity, resulting in contention on the CPU. The most common bottlenecks in SOA Suite applications are IO time (waiting for data to be written to some resource, such as a disk or the network) and availability of data (waiting for data to be provided by some external system or user). However, all of the resources mentioned in the preceding list can cause bottlenecks in a SOA Suite application.
It is worth noting that different use cases can have different bottlenecks, so you need to tune for a realistic set of use cases; this is something that is discussed in more detail in a later performance tuning chapter.
We'll start by looking at some tools bundled in the various SOA Suite Java Virtual Machines for diagnosing Java issues, and look at some other common causes of resource contention in SOA Suite. The recipes in this chapter offer suggestions on next steps for common issues, but as mentioned earlier, later chapters will target specific areas of the SOA infrastructure in more detail, once you get over the hurdle of knowing where to start looking.