Synopses & Reviews
As long as there's been a Web, people have been trying to make it faster. The maturation of the Web has meant more users, more data, more features, and consequently longer waits on the Web. Improved performance has become a critical factor in determining the usability of the Web in general and of individual sites in particular.Web Performance Tuning, 2nd Edition is about getting the best possible performance from the Web. This book isn't just about tuning web server software; it's also about streamlining web content, getting optimal performance from a browser, tuning both client and server hardware, and maximizing the capacity of the network itself.Web Performance Tuning hits the ground running, giving concrete advice for quick results -- the "blunt instruments" for improving crippled performance right away. The book then shifts gears to give a conceptual background of the principles of computing performance. The latter half of the book examines each element of a web transaction -- from client to network to server -- to find the weak links in the chain and show how to strengthen them.In this second edition, the book has been significantly expanded to include:
- New chapters on Web site architecture, security, reliability, and their impact on performance
- Detailed discussion of scalability of Java on multi-processor servers
- Perl scripts for writing web performance spiders that handle logins, cookies, SSL, and more
- Detailed instructions on how to use Perl DBI and the open source program gnuplot to generate performance graphs on the fly
- Coverage of rstat, a Unix-based open source utility for gathering performance statistics remotely
In addition, the book includes many more examples and graphs of real-world performance problems and their solutions, and has been updated for Java 2.This book is for anyone who has waited too long for a web page to display, or watched the servers they manage slow to a crawl. It's about making the Web more usable for everyone.
This text is about getting the best possible performance from the Web: streamlining Web content, getting optimal performance from a browser, tuning both client and server hardware, and maximizing the capacity of the network itself.
This handbook is for anyone responsible for a Web site, from the person running a personal site off a Linux PC at home up to large corporate site managers who wants to improve their performance right now.
About the Author
Patrick Killelea currently works for a major on-line brokerage, but he won't say which one. He spends his days writing monitoring and load testing tools, and proclaiming the web to the be the one true front end because of its simplicity, portability, and performance. He thinks Microsoft is not to be trusted with your back end. Patrick knows there are huge web performance improvements yet to be realized using the details of existing open protocols. He is a fan of T/TCP and hopes one day to set up a connection and deliver an entire web page all in a single packet. Patrick spends his evenings playing with his wife and kids, and is interested in etymologies, obscure religions, and pan-seared salmon with mixed greens and a nice merlot. He likes to get e-mail about web and Java performance issues. Please visit his web site at patrick.net.
Table of Contents
Preface; What Is This Book Good For?; Audience for This Book; Assumptions of This Book; How This Book Is Organized; Font Conventions; How to Contact Us; Web Site Updates and Code Examples; Other Books and Resources; Disclaimer; Acknowledgments for the Second Edition; Preliminary Considerations; Chapter 1: The Quick and the Dead; 1.1 Questions for the Browser Side; 1.2 Questions for the Server Side; 1.3 Key Recommendations; Chapter 2: Web Site Architecture; 2.1 Trade-offs; 2.2 Elements; 2.3 Example Web Site Architectures; 2.4 Trends; 2.5 Sample Configurations; 2.6 Key Recommendations; Chapter 3: Capacity Planning; 3.1 Do the Math . . .; 3.2 . . . But Trust Your Eyes More than the Math; 3.3 Questions to Ask; 3.4 How Much Bandwidth Do You Need?; 3.5 How Fast a Server Do You Need?; 3.6 How Much Memory Do You Need?; 3.7 Key Recommendations; Chapter 4: Performance Monitoring; 4.1 Parameters of Performance; 4.2 Latency and Throughput; 4.3 Utilization; 4.4 Efficiency; 4.5 Monitoring Web Performance Using Perl; 4.6 Automatically Generating Monitoring Scripts Using Sprocket; 4.7 Using a Relational Database to Store and Retrieve Your Monitoring Data; 4.8 Monitoring Machine Utilization with rstat; 4.9 Monitoring Per-Process Statistics; 4.10 Generating Graphs from ps Data; 4.11 Monitoring Other Things; 4.12 Making a System Dashboard Web Page; 4.13 Key Recommendations; Chapter 5: Load Testing; 5.1 Load Test Preparation; 5.2 Trade-offs with Load Testing Tools; 5.3 Writing Your Own Load Testing Tools; 5.4 Benchmark Specifications and Benchmark Tests; 5.5 Other Resources; 5.6 Key Recommendations; Chapter 6: Performance Analysis; 6.1 Using analysis.cgi to Find a Bottleneck; 6.2 Snooping HTTP with Sprocket; 6.3 Look at Connections; 6.4 Log File Analysis; 6.5 Hits per Second; 6.6 A Few More Tips; 6.7 Key Recommendations; Chapter 7: Reliability; 7.1 Typical Failures; 7.2 Dependencies; 7.3 Smoothing Outages; 7.4 Key Recommendations; Chapter 8: Security; 8.1 HTTPS and SSL; 8.2 Firewalls; 8.3 Bastion Hosts; 8.4 chroot; 8.5 Key Recomendation; Chapter 9: Case Studies; 9.1 Database Table Growing Without Limit; 9.2 Reverse DNS Lookups Slows Logging; 9.3 Kinked Cable; 9.4 Database Connection Pool Growth Limits Performance; 9.5 Key Recommendation; Chapter 10: Principles and Patterns; 10.1 Principles of Performance Tuning; 10.2 Patterns of Performance Improvement; 10.3 Key Recommendations; Tuning in Depth; Chapter 11: Browsers; 11.1 How Browsers Work; 11.2 Types of Browsers; 11.3 The Perfect Browser; 11.4 Browser Speed; 11.5 Browser Tuning Tips; 11.6 Non-Browser Web Clients; 11.7 Key Recommendations; Chapter 12: Client Operating System; 12.1 Microsoft Windows; 12.2 Macintosh; 12.3 Unix; 12.4 Key Recommendations; Chapter 13: Client Hardware; 13.1 CPU; 13.2 RAM; 13.3 Cache; 13.4 Bus; 13.5 Disk; 13.6 Video; 13.7 BIOS; 13.8 Key Recommendations; Chapter 14: Lines and Terminators; 14.1 Forwarding and Latency; 14.2 Your Modem, the Information Driveway; 14.3 ISDN; 14.4 Cable Modems; 14.5 xDSL; 14.6 Higher Capacity Lines; 14.7 Intranets; 14.8 Network Modeling Tools; 14.9 The Internet; 14.10 PTTs; 14.11 Key Recommendations; Chapter 15: Network Protocols; 15.1 Power and Protocols; 15.2 Factors Affecting Network Protocol Performance; 15.3 The Protocols of the Web; 15.4 Key Recommendations; Chapter 16: Server Hardware; 16.1 Box on a Wire; 16.2 Good I/O; 16.3 Multiple Busses; 16.4 Fast Disks; 16.5 Lots of Memory; 16.6 Scalability; 16.7 Network Interface Card; 16.8 Bus; 16.9 Memory; 16.10 RAM Characteristics; 16.11 CPU; 16.12 Symmetric Multiprocessing (SMP); 16.13 Disk Activity and PID; 16.14 Key Recommendations; Chapter 17: Server Operating System; 17.1 Unix and the Origin of the Web; 17.2 Unix Flavors; 17.3 System Calls Versus Library Calls; 17.4 Processes and the Kernel; 17.5 The Filesystem; 17.6 The Windowing System; 17.7 Versions and Patches; 17.8 Configurable OS Parameters; 17.9 Unix OS Monitoring Tools; 17.10 System Call Tracers; 17.11 Network Snooping Tools; 17.12 How Many Connections Can My Server Handle?; 17.13 How Many Processes Can My Server Handle?; 17.14 How Quickly Can My Server Fork New Processes?; 17.15 Unix Versus NT as the Web Server OS; 17.16 The Exokernel; 17.17 Key Recommendations; Chapter 18: Server Software; 18.1 The Evolution of Web Servers; 18.2 System Calls Made by a Web Server; 18.3 How Servers Fail; 18.4 Configuring Apache and Netscape Web Servers; 18.5 Other Servers; 18.6 Missing Features; 18.7 Proxy Servers; 18.8 Hierarchical Caches; 18.9 Key Recommendations; Chapter 19: Content; 19.1 Size Matters; 19.2 As Good As It Gets; 19.3 Caching and Differences; 19.4 HTML and Compression; 19.5 Performance Tips for HTML Authors; 19.6 The Document Object Model; 19.7 Graphics; 19.8 Audio; 19.9 Video; 19.10 Key Recommendations; Chapter 20: Custom Applications; 20.1 Programmers; 20.2 CGI Programs; 20.3 CGI Internals and Performance Problems; 20.4 General CGI Tips; 20.5 CGI Language-Specific Optimization Tips; 20.6 Daemonize It; 20.7 CGI Database Access Performance; 20.8 Logging; 20.9 NSAPI and ISAPI; 20.10 DOM; 20.11 JSP, ASP, PHP; 20.12 Key Recommendations; Chapter 21: Java; 21.1 Java Will Never Be Good Enough for GUI Applications; 21.2 Java Is Good Enough for the Server Side; 21.3 Performance Problems Intrinsic to Java; 21.4 Coding Tips; 21.5 Compilers; 21.6 Profile Your Code; 21.7 Decompilers; 21.8 OS-Level Profiling Tools; 21.9 JITs; 21.10 Static Compilers; 21.11 Virtual Machines; 21.12 Runtime Options; 21.13 Java Chips; 21.14 Java Benchmarks; 21.15 Web Sites with Java Performance Info; 21.16 Key Recommendations; Chapter 22: Databases; 22.1 Do You Really Need a Relational Database?; 22.2 Performance Tips; 22.3 How Many Connections Can Your Database Handle?; 22.4 When the Database Is Overloaded; 22.5 Analysis; 22.6 Key Recommendations; Web Performance Product Lists and Reviews; Problems with Commercial Tools; Monitoring Tools; Load Generation Tools; Preloaders; Network Optimizers; IP Traffic Management Products; Content Compressors; Hybrid Development Tools/Databases; Java Profilers and Optimizers; Caching Services; Professional Services; Load Balancers; Modeling Tools; Colophon;