Every software project I've ever worked on has had "a performance problem". Eventually, you will have to do a performance profile of your application. So now what?
Sometimes you get to buy the big tools: OPTNET, Mercury Load Runner, etc. Sometimes you have a whopping (sarcasm alert!) $500 budget and a couple of machines you can repurpose. Here's my basic setup for performance profiling a web application on the cheap:
1. SQL Profiler (or the equivalent for your database).
2. WireShark installed on each tier
3. FireBug and YSlow installed on the client
4. JMeter (or MS ACT if you're a C# environment) on the client for generating load.
Total cost of software: $0
Your hardware needs will vary, but you will need at least enough to replicate the tiers you have in production. If production is a one-box setup, then you need one box in QA. If production has separate web tiers, app tiers, and database tiers, then you're looking at 3 or more boxes. Hopefully you have this already from your functional testing.
In another post we'll talk about how to use this setup effectively.