Load testing answers a fairly blunt question: how much concurrent traffic can this server and this application actually absorb before response times collapse or something breaks? The tools below are all free, and between them they cover everything from hammering a site from a single laptop to distributed tests that simulate thousands of virtual users. It is hard not to suspect that the team behind a certain Olympic ticketing site had never run any of them.

Grinder is an open-source load testing framework built on the JVM. It distributes a test across many load injector processes, and test scripts can be written with its Jython engine; HTTP tests can be managed through an HTTP proxy. According to the project, its intended audience is people who understand the code they are testing. Grinder is not meant to be a black box that returns a set of response times — because tests are programmed rather than merely scripted, a developer can exercise the internals of an application at several levels instead of measuring only what a user sees through the interface.
Pylot is an open-source tool aimed at the performance and scalability of web services. It drives HTTP load tests that are useful for capacity planning, establishing a baseline, analysis and system tuning. It generates concurrent requests, checks the server's responses, and produces reports with metrics. Test suites can be launched and watched either from a GUI or from a shell/console.
Web Capacity Analysis Tool (WCAT) is a lightweight load generator that replays scripted HTTP requests against a web server or a load-balanced farm while collecting performance counters for later analysis. It is multithreaded and can drive several load test clients from a single controller, which is how it reaches thousands of simulated concurrent users. The idea is to press retired machines into service as clients, each producing multiple virtual clients — the ceiling depending on the network adapter and other hardware in that box. You can choose HTTP 1.0 or 1.1 and decide whether to use SSL. If part of the site is restricted, scripts can perform basic or NTLM authentication; for sites that rely on cookies, forms or session-based login, you can construct the appropriate GET or POST requests to authenticate a test user. WCAT also manages whatever cookies the site sets, so profile and session state persist across requests.
fwptt is another load testing tool for web applications. It records ordinary requests as well as Ajax calls, and works against ASP.NET, JSP, PHP and other kinds of web applications.
JCrawler is an open-source (CPL) stress testing tool written in Java that behaves, as the name suggests, like a crawler. Hand it a handful of URLs and it starts crawling, generating load on your application in its own particular way. One obvious use is measuring the load that search engine crawlers put on a site. It has a second trick: build a sitemap and, with a click, submit it to the top five search engines.
Apache JMeter is a pure Java desktop application designed for load testing and stressing servers. It started out for Web/HTTP testing and has since grown modules for many other kinds of targets; it ships with components for HTTP and for SQL databases via JDBC. You can use it against static or dynamic resources, apply heavy load to a server or network to see how it holds up, and analyze behavior under different load patterns. Its interface is customizable for presenting results, synchronizing tests, and creating and running them.
Siege — the name means what it says — is a stress and benchmarking tool for developers who want to know how an application behaves under pressure. It sends concurrent requests from multiple users to a site according to its configuration, records the response time of every request each user makes, and repeats the run at a fixed level of concurrency. It supports basic authentication, cookies, and both HTTP and HTTPS.
http_load runs requests in a parallel, multiplexed fashion to measure a web server's throughput and load. Unlike most stress tools, it works from a single process, so it generally will not take down the client machine. HTTPS requests are supported too.
Web Polygraph is a web performance testing tool that has become a benchmark at many companies — Microsoft, for instance, has used it as a reference point when analyzing the performance of its own software. Job postings for testers frequently list familiarity with it as a requirement.
OpenSTA is a free, open-source web performance testing tool that can record quite powerful scripts and replay them as performance tests — simulating, for example, many different users logging in to a site at the same time. Recorded scripts can be edited using the specified syntax to focus on particular performance metrics. Its fairly rich graphical output makes the resulting reports much easier to read. Architecturally it is built on CORBA: it creates a virtual proxy and, with its own script control language, records all HTTP/S traffic passing through that proxy. Performance counters gathered by its collectors, together with the HTTP data, are then used to analyze how the system behaves.