It was a pretty low end server at webfaction. The point I'm making is that it should give me the same errors at low load that it gives at high load. But with django when you change your load, the errors change.
You should monitor server behaviour and throttle traffic back when it's close to its limits. I usually see things on monitored servers (check memory allocation over time - how much cache, how much process, how much kernel, iowait time, swap for sharp increases) in time to issue corrective measures.
Tuning maximum processes/threads on Apache seems one simple way to prevent that. Memcache and Varnish are also your friends with that - anything that prevents the workload from reaching Apache is.