Blender render crash when using subsurf modifiers.
Short Answer
You are exaggerating with the subdivision.
Using large values on for subsurf or adding mutliple instances of the modifier will stress your system in no time.
It is better to use proper modeling and efficient topology, and keep the subdivision to low values. Less than 3 levels of subdivision should be enough for most projects.
Long answer
In this case you are using multiple subsurf modifiers on some of the objects.
Doing that is not only going to cripple the performance of your computer but can even make it crash.

What exaclty is the is the issue with subsurf then?
From the blender manual:

Subdivision Surface is a method of subdividing the faces of a mesh to give a smooth appearance, to enable modeling of complex smooth surfaces with simple, low-vertex meshes. This allows high resolution mesh modeling without the need to save and maintain huge amounts of data and gives a smooth organic look to the object.
This process creates virtual geometry that is generated non-destructively without modifying the original mesh

Creating virtual subdivisions on your geometry saves you the trouble of  creating smooth curved surfaces, but when you do the final render blender has to compute all of that &quot;virtual&quot; geometry as if it was real anyway.
With each one of the modifiers on the stack your geometry is getting subdivided: out of every quad at least 4 virtual quads will be created. A second (or third) subsurf modifier will subdivide it even further, creating a very large number of vertices in no time!
So what can you do to prevent this?
For most models it is likely you can get decent results with proper modeling and adequate topology, and using only one subsurf modifier with low values.
If the edges on your model are not round enough, consider reworking your mesh to have a greater level of detail, or cautiously increase the number of subdivisions in a single modifier. You should hardly ever need more than level 2 or 3:

What is important to keep in mind is that for every subdivision level the number of polygons increases exponentially: It's very easy to end up with a number of vertices that exceeds what your computer can handle.
(Again from the manual)

Great levels of Subsurf demand more video memory, and a faster graphics card. Blender could potentially crash if your level of Subsurf surpasses your system memory.
Note about potential crashes: Be aware that the Subsurf Modifier will need more and more memory at higher levels of subsurf, and the more dense your base mesh, the more memory you will need. In 32 bit systems, Blender could potentially crash with malloc errors, when you surpass 2~3 GiB of memory used. This is not a Blender bug. Blender, when paired with a 64 bit system, could use 64 GiB of memory, thus reducing the chances of malloc() errors.

To get an idea of how many vertices are created with every subdivision level take a look at this charts:


(click on the images to enlarge)
But what if I still need high levels or more than one Subsurf modifer in the stack?
Sometimes you do need to use a subsurf modifier to create denser geometry for other modifiers to work, and then you need to have a second subsurf modifier to smooth out the result. For example when using a displace modifier:

In those cases you might want to consider applying the modifiers and/or decimating or retopologizing your mesh, all in the interest of having a number of vertices that is reasonable enough, so that your system can handle it.