Let me start by saying that Performance Analysis for Java Web Sites is not intended to help you make your code more efficient. However, it is a great asset for Java architects who are concerned with making an entire Web site more efficient. Figure A shows an information capsule of the book.
A few words of praise for the authors
These three authors obviously know their stuff: This is the first book I have encountered that was written by people who actually understand Java and its place in the enterprise. As well they should, since they all work for the IBM WebSphere Services group and the IBM WebSphere Application Server Performance team. Of course just because these people work for IBM doesn’t mean that all they write about is WebSphere. Their advice is applicable to practically any Java Web site, whether geared towards delivering static content or dynamic content.
The authors pull the first nine chapters of the book together in a case study. They detail the preparation work for performance testing an e-commerce site, step by step, explaining each step completely. This section features lots of example worksheets, including the calculations that were used to arrive at the final benchmark numbers.
With this preparation as a jumping-off point, the authors detail their iterative testing process: They begin by testing a simple single application server with the minimum amount of site features and then progress to a clustered, load-balanced server environment. They then tie all of the information together with a capacity-planning case study. Following the plan detailed in this book should really take the guesswork out of your first performance test.
Practical test script advice
Additionally, the authors go into detail about how to actually script a performance test. If you’ve ever tried to performance-test a Web site, you know how much of a chore it is to create the test scripts. There are tons of hardware interactions to consider, difficulties in defining the goals, and problems reproducing user behavior—all the kind of stuff that will quickly give you a pounding headache.
This section discusses how to use Mercury Interactive LoadRunner and SilkPerformer V for load generation, and even goes into generating dynamic requests and interacting with dynamic Web pages from your test scripts. There’s also a section on common pitfalls that will help prevent some frequent test-scripting mistakes. This is the kind of valuable information that you will never run across unless you’ve been lucky (or unlucky) enough to be part of a previous performance test yourself.
Chapter 4 offers 10 pages on Java specifics. It explains the details of minimum and maximum heap size and how it affects garbage collection, and should be mandatory reading for developers on high-demand Web sites. That goes for vendors too. I’ve tried in the past to get help from our Java application server vendors to determine how much memory to allocate to each instance of our Web site, and I could tell that they were guessing by their answer. Too bad we hadn’t read the information in this chapter.
Chapter 4 also covers the roles of various Web site components. There isn’t too much detail here because there are lots of different vendors and implementations. However, this chapter does hit on quite a few of the components, from the NIC all they way to HTTP and proxy servers, and lists bottleneck risks for each component. I learned some interesting things from this part; such as it’s not uncommon to have two firewalls or a reverse proxy server for a single site. The chapter wraps up with a nice discussion on Web site topology, including some best practices.
In Chapter 5, “Performance Profiles of Common Web Sites,” the authors showcase their expertise by dealing with the challenges posed by several common types of Web sites. Each type of Web site is broken down in terms of caching potential, special considerations, and performance testing considerations. I found this information to be extremely valuable.
You need to know what you’re getting
Overall, this is an excellent book; I just wouldn’t recommend it for someone looking to simply improve his or her code. Instead this book provides information about the big picture, and you need to look at it that way to get the full benefit of the information presented.