When you state the dataserver was still "running", what exactly did you find out ?
- cpu time changing (and staying high)
- I/Os changing
which means it was actually running and so busy that connection failed (timed out). As opposed to hung, doing nothing, and unable to accept connections.
In the former case, you need to check that is was not in an infinite loop, or rolling back a large transaction.