What would you guys use to monitor an IIS server performance, detect and respond to errors etc, find bottlenecks, visualize CPU utilization under load, monitor PHP MySQL performance etc.
This may not meet all your needs, but we use Nagios to keep an eye on our servers. It it's very simplest level it can just monitor whether or not a server is up, but with agents installed it can also monitor CPU load and anything else you can determine locally. Even if an agent doesn't exist to do exactly what you want, they are quite easy to write, I've written a few highly customised ones over the years with very little effort. We use Nagios on Linux, but it does have Windows support, so it's worth considering anyway.
Nagios is a fairly large solution though, requiring a server, and is designed for monitoring a whole network of machines and servers than for monitoring just one single server. It is free and open source though.
As the others has said, Nagios works fairly well, and when you integrate the performance monitoring well enough, you can work out quite well when things become problematic.
But you should not neglect simple and pure performance graphers like ganglia, for example. Even though it's not as flexible, it runs with almost non-existing overhead in a clean client/server push model that simply works and is quite stable.