| |
| |
Preface | |
| |
| |
| |
Preliminary Considerations | |
| |
| |
| |
The Quick and the Dead | |
| |
| |
Questions for the Browser Side | |
| |
| |
Questions for the Server Side | |
| |
| |
Key Recommendations | |
| |
| |
| |
Web Site Architecture | |
| |
| |
Trade-offs | |
| |
| |
Elements | |
| |
| |
Example Web Site Architectures | |
| |
| |
Trends | |
| |
| |
Sample Configurations | |
| |
| |
Key Recommendations | |
| |
| |
| |
Capacity Planning | |
| |
| |
Do the Math | |
| |
| |
... But Trust Your Eyes More than the Math | |
| |
| |
Questions to Ask | |
| |
| |
How Much Bandwidth Do You Need? | |
| |
| |
How Fast a Server Do You Need? | |
| |
| |
How Much Memory Do You Need? | |
| |
| |
Key Recommendations | |
| |
| |
| |
Performance Monitoring | |
| |
| |
Parameters of Performance | |
| |
| |
Latency and Throughput | |
| |
| |
Utilization | |
| |
| |
Efficiency | |
| |
| |
Monitoring Web Performance Using Perl | |
| |
| |
Automatically Generating Monitoring Scripts Using Sprocket | |
| |
| |
Using a Relational Database to Store and Retrieve Your Monitoring Data | |
| |
| |
Monitoring Machine Utilization with rstat | |
| |
| |
Monitoring Per-Process Statistics | |
| |
| |
Generating Graphs from ps Data | |
| |
| |
Monitoring Other Things | |
| |
| |
Making a System Dashboard Web Page | |
| |
| |
Key Recommendations | |
| |
| |
| |
Load Testing | |
| |
| |
Load Test Preparation | |
| |
| |
Trade-offs with Load Testing Tools | |
| |
| |
Writing Your Own Load Testing Tools | |
| |
| |
Benchmark Specifications and Benchmark Tests | |
| |
| |
Other Resources | |
| |
| |
Key Recommendations | |
| |
| |
| |
Performance Analysis | |
| |
| |
Using analysis.cgi to Find a Bottleneck | |
| |
| |
Snooping HTTP with Sprocket | |
| |
| |
Look at Connections | |
| |
| |
Log File Analysis | |
| |
| |
Hits per Second | |
| |
| |
A Few More Tips | |
| |
| |
Key Recommendations | |
| |
| |
| |
Reliability | |
| |
| |
Typical Failures | |
| |
| |
Dependencies | |
| |
| |
Smoothing Outages | |
| |
| |
Key Recommendations | |
| |
| |
| |
Security | |
| |
| |
HTTPS and SSL | |
| |
| |
Firewalls | |
| |
| |
Bastion Hosts | |
| |
| |
Chroot | |
| |
| |
Key Recomendation | |
| |
| |
| |
Case Studies | |
| |
| |
Database Table Growing Without Limit | |
| |
| |
Reverse DNS Lookups Slows Logging | |
| |
| |
Kinked Cable | |
| |
| |
Database Connection Pool Growth Limits Performance | |
| |
| |
Key Recommendation | |
| |
| |
| |
Principles and Patterns | |
| |
| |
Principles of Performance Tuning | |
| |
| |
Patterns of Performance Improvement | |
| |
| |
Key Recommendations | |
| |
| |
| |
Tuning in Depth | |
| |
| |
| |
Browsers | |
| |
| |
How Browsers Work | |
| |
| |
Types of Browsers | |
| |
| |
The Perfect Browser | |
| |
| |
Browser Speed | |
| |
| |
Browser Tuning Tips | |
| |
| |
Non-Browser Web Clients | |
| |
| |
Key Recommendations | |
| |
| |
| |
Client Operating System | |
| |
| |
Microsoft Windows | |
| |
| |
Macintosh | |
| |
| |
Unix | |
| |
| |
Key Recommendations | |
| |
| |
| |
Client Hardware | |
| |
| |
CPU | |
| |
| |
RAM | |
| |
| |
Cache | |
| |
| |
Bus | |
| |
| |
Disk | |
| |
| |
Video | |
| |
| |
BIOS | |
| |
| |
Key Recommendations | |
| |
| |
| |
Lines and Terminators | |
| |
| |
Forwarding and Latency | |
| |
| |
Your Modem, the Information Driveway | |
| |
| |
ISDN | |
| |
| |
Cable Modems | |
| |
| |
xDSL | |
| |
| |
Higher Capacity Lines | |
| |
| |
Intranets | |
| |
| |
Network Modeling Tools | |
| |
| |
The Internet | |
| |
| |
PTTs | |
| |
| |
Key Recommendations | |
| |
| |
| |
Network Protocols | |
| |
| |
Power and Protocols | |
| |
| |
Factors Affecting Network Protocol Performance | |
| |
| |
The Protocols of the Web | |
| |
| |
Key Recommendations | |
| |
| |
| |
Server Hardware | |
| |
| |
Box on a Wire | |
| |
| |
Good I/O | |
| |
| |
Multiple Busses | |
| |
| |
Fast Disks | |
| |
| |
Lots of Memory | |
| |
| |
Scalability | |
| |
| |
Network Interface Card | |
| |
| |
Bus | |
| |
| |
Memory | |
| |
| |
RAM Characteristics | |
| |
| |
CPU | |
| |
| |
Symmetric Multiprocessing (SMP) | |
| |
| |
Disk Activity and PID | |
| |
| |
Key Recommendations | |
| |
| |
| |
Server Operating System | |
| |
| |
Unix and the Origin of the Web | |
| |
| |
Unix Flavors | |
| |
| |
System Calls Versus Library Calls | |
| |
| |
Processes and the Kernel | |
| |
| |
The Filesystem | |
| |
| |
The Windowing System | |
| |
| |
Versions and Patches | |
| |
| |
Configurable OS Parameters | |
| |
| |
Unix OS Monitoring Tools | |
| |
| |
System Call Tracers | |
| |
| |
Network Snooping Tools | |
| |
| |
How Many Connections Can My Server Handle? | |
| |
| |
How Many Processes Can My Server Handle? | |
| |
| |
How Quickly Can My Server Fork New Processes? | |
| |
| |
Unix Versus NT as the Web Server OS | |
| |
| |
The Exokernel | |
| |
| |
Key Recommendations | |
| |
| |
| |
Server Software | |
| |
| |
The Evolution of Web Servers | |
| |
| |
System Calls Made by a Web Server | |
| |
| |
How Servers Fail | |
| |
| |
Configuring Apache and Netscape Web Servers | |
| |
| |
Other Servers | |
| |
| |
Missing Features | |
| |
| |
Proxy Servers | |
| |
| |
Hierarchical Caches | |
| |
| |
Key Recommendations | |
| |
| |
| |
Content | |
| |
| |
Size Matters | |
| |
| |
As Good As It Gets | |
| |
| |
Caching and Differences | |
| |
| |
HTML and Compression | |
| |
| |
Performance Tips for HTML Authors | |
| |
| |
The Document Object Model | |
| |
| |
Graphics | |
| |
| |
Audio | |
| |
| |
Video | |
| |
| |
Key Recommendations | |
| |
| |
| |
Custom Applications | |
| |
| |
Programmers | |
| |
| |
CGI Programs | |
| |
| |
CGI Internals and Performance Problems | |
| |
| |
General CGI Tips | |
| |
| |
CGI Language-Specific Optimization Tips | |
| |
| |
Daemonize It | |
| |
| |
CGI Database Access Performance | |
| |
| |
Logging | |
| |
| |
NSAPI and ISAPI | |
| |
| |
DOM | |
| |
| |
JSP, ASP, PHP | |
| |
| |
Key Recommendations | |
| |
| |
| |
Java | |
| |
| |
Java Will Never Be Good Enough for GUI Applications | |
| |
| |
Java Is Good Enough for the Server Side | |
| |
| |
Performance Problems Intrinsic to Java | |
| |
| |
Coding Tips | |
| |
| |
Compilers | |
| |
| |
Profile Your Code | |
| |
| |
Decompilers | |
| |
| |
OS-Level Profiling Tools | |
| |
| |
JITs | |
| |
| |
Static Compilers | |
| |
| |
Virtual Machines | |
| |
| |
Runtime Options | |
| |
| |
Java Chips | |
| |
| |
Java Benchmarks | |
| |
| |
Web Sites with Java Performance Info | |
| |
| |
Key Recommendations | |
| |
| |
| |
Databases | |
| |
| |
Do You Really Need a Relational Database? | |
| |
| |
Performance Tips | |
| |
| |
How Many Connections Can Your Database Handle? | |
| |
| |
When the Database Is Overloaded | |
| |
| |
Analysis | |
| |
| |
Key Recommendations | |
| |
| |
| |
Web Performance Product Lists and Reviews | |
| |
| |
Index | |