One thing we do at $work is collecting each server's static with
https://collectd.org/ and often the graphs are pretty revealing. Sometimes it's the disk activity that kills the server, sometimes it's the memory usage, or number of processes, or a disk running full.
For things like databases, you can gather more specific information as well, for example number of queries and connections, failed transactions and the likes.
If you have a hunch what it might be, you could try to counter-act, for example limiting memory, number of processes, or use cgroups to limit IO rate (see for examplehttp://unix.stackexchange.com/questions/48138/how-to-throttl...).
Also leave a ssh connection with something like htop or atop open, and look at it once it freezes up.